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 的帮助,因为他们的想法推动了我朝着正确的方向前进。