从 FreeNAS 命令行发现外部 IP

从 FreeNAS 命令行发现外部 IP

FreeNAS (FreeBSD) 衍生产品中是否有一些命令行函数可以返回我的外部地址?由于该地址与 DynDns 同步(通过路由器),因此在 C# 中,我通过 DNS 查询检索到该地址,如下所示:

var hostEntry = Dns.GetHostEntry("myexternalname.dyndns.org");
foreach (var iAddress in hostEntry.AddressList) {
    if (iAddress.AddressFamily == AddressFamily.InterNetwork) {
        MessageBox.Show(iAddress);
    }
}

答案1

先决条件

  • 命令行工具
  • 牛羚
  • awk 教程
  • 种类
  • 独特

从命令行:

dig yourserver.dyndns.org | grep "IN" | grep "[0-9]" | awk '{print $5}' | sort | uniq 

优点:

  • 非常简单的管道序列至少返回一个 IP 地址。
  • 可以处理同一名称的多个 IP 地址。

缺点:

  • 结果输出文本,这意味着你可能需要重定向到文件
  • 我可以想到至少一个极端情况,这个脚本可能会失败,尽管它“足够好”

丑陋之处:

  • 脚本是远的从最佳状态开始。我花了几分钟就把它弄好了。
  • 命令行依赖性太多。
  • 虽然命令相当通用,但工具链是 GNU 专用的。
  • 最好用 perl 或 python 编写单个脚本。

答案2

这是我最喜欢的命令:

wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

简单,清楚。如果你有 curl:

curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

答案3

我找到了在 FreeNAS 上运行的命令。

# host myexternalname.dyndns.org

它返回

myexternalname.dyndns.org      A       89.172.197.320

从那时起我只使用 awk:

host myexternalname.dyndns.org | awk '{ print $3; }'

并且仅返回 IP:

89.172.197.320

PS 我知道 89.172.197.320 不是真实 IP 地址。我这样写是为了不共享我的 IP 地址(或他人的 IP 地址)。

PPS 感谢 Kronick 和 Avery Payne 的帮助,因为他们的想法推动了我朝着正确的方向前进。

相关内容