0

我找到了一个可以满足我需要的帖子,但是在 Windows 上:

以编程方式发现公共 IP

> tracert -d www.yahoo.com

`Tracing route to www-real.wa1.b.yahoo.com [69.147.76.15]
over a maximum of 30 hops:`

1    <1 ms    <1 ms    <1 ms  192.168.14.203
2     *        *        *     Request timed out.
3     8 ms     8 ms     9 ms  68.85.228.121
4     8 ms     8 ms     9 ms  68.86.165.234
5    10 ms     9 ms     9 ms  68.86.165.237
6    11 ms    10 ms    10 ms  68.86.165.242

The 68.85.228.121 is a Comcast (my provider) router. We can ping that:

平 -r 9 68.85.228.121 -n 1

Pinging 68.85.228.121 with 32 bytes of data:

Reply from 68.85.228.121: bytes=32 time=10ms TTL=253 Route: 66.176.38.51 ->

68.85.228.121 ->

68.85.228.121 ->

192.168.14.203

Voila! The 66.176.38.51 is my public IP.

这个(第三个)答案显示了一种获取我的 ISP 的 IP 然后使用 ping 来获取我的 IP 的方法。

它在 Linux 上未经修改就无法工作。Traceroute 可以代替 tracert 工作,但是因为它的输出是不可预测的,所以我不确定如何解析它。

我做到了

IP="$(traceroute -d www.yahoo.com | grep ' 2 ' | sed -e 's/.*(\(.*\)).*/\1/')"

但是 grep 是(很差)硬编码的。我没有看到如何让 ping 像示例中那样工作。

任何输入将不胜感激。

4

5 回答 5

4

就个人而言,我会运行这个命令:

wget -qO- whatismyip.org

于 2012-05-06T05:20:30.820 回答
0

这不是一个可靠的解决方案,一种被动的方法是编写一个脚本来拉取您自己的路由器的“WAN”状态页面。您可以根据需要多次这样做,没有人会抱怨过度探测。

于 2012-05-06T11:15:38.063 回答
0

如果您想要的是简单,并且您不介意依赖其他服务器(或服务),请尝试:

dig +short myip.opendns.com @resolver1.opendns.com

那只会吐出你的地址

或者,

#!/bin/bash
myip="$(dig +short myip.opendns.com @resolver1.opendns.com)"
echo "myip = [${myip}]"
于 2016-02-09T15:51:46.960 回答
0

我只是将@pizza 所说的与这个答案结合起来,并生成了以下工作脚本。它不如使用traceroute之类的东西好,但它要简单得多。

   #!/bin/bash
   content="$(wget http://checkip.dyndns.org/ -q -O -)"
   myip="$(<<< "$content" sed -e 's/.*Current IP Address: //' -e 's/<.*//')"
   echo "myip = [${myip}]"

wget命令检索向 dyndns 询问我的 IP 的结果。然后,sed在 IP 地址 dyndns 返回之前和之后砍掉所有内容。

如其他地方所述,如果此类请求过于频繁,诸如 dyndns 之类的网站可能会阻止此类请求,但由于您的 IP 在大多数情况下应保持不变,至少在您的会话期间(如果不是很多天的话)应该是没有必要的经常运行这个脚本。

于 2016-02-09T09:19:33.460 回答
0

好的,我知道这是一个旧线程,但是这篇文章向我揭示了一些事情,并将其与我已经学到的知识相结合,我想我已经提出了一个可靠的解决方案。

你想要的 grep 是:

grep -m 1 -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

我个人查找外部 IP 的解决方案曾经是:

curl icanhazip.com

现在它是:

ISP=`traceroute -M 2 -m 2 8.8.8.8 | grep -m 1 -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'` | ping -R -c 1 -t 1 -s 1 $ISP | grep RR | grep -m 1 -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' > .extIP

接着

cat .extIP

玩得开心!

于 2016-02-08T19:01:04.020 回答