从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); } } 

先决条件

  • gnu grep
  • gnu tr
  • gnu awk
  • 分类
  • uniq的

从命令行:

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

好:

  • 非常简单的pipe道序列至less返回一个IP地址。
  • 可以为同一个名字处理多个IP地址。

不好:

  • 作为结果泵出文本,这意味着你可能需要redirect到一个文件
  • 我至less可以想到一个脚本可能会失败的边界情况,虽然它“足够好”

丑陋的:

  • 脚本远非最佳。 我只是在几分钟之内就把它弄出来了。
  • 太多的命令行依赖关系。
  • 虽然命令是相当通用的,但工具链是GNU特有的。
  • 用perl或python作为一个整体脚本写得更好。

这里是我最喜欢的命令:

 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/<.*$//' 

我发现在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的帮助,因为他们的想法将我推向了正确的方向。