has*_*sen 26 python tcp ip-address
我在路由器后面,我需要一个简单的命令来发现我的公共IP(而不是谷歌搜索我的IP和点击结果)
这有什么标准协议吗?我听说过STUN,但我不知道怎么用它?
PS我打算写一个简短的python脚本来做
Car*_*rra 23
这可能是最简单的方法.解析以下命令的输出:
例如,我在Windows机器上,但同样的想法也应该来自unix.
> 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
Run Code Online (Sandbox Code Playgroud)
68.85.228.121是Comcast(我的提供商)路由器.我们可以说:
> ping -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
Run Code Online (Sandbox Code Playgroud)
瞧!66.176.38.51是我的公共IP.
Tim*_*ews 17
我已经创建了一个连接到http://automation.whatismyip.com/n09230945.asp的程序, 它是用D写的,让其他人告诉你他们看到你的ip,这可能是最可靠的方式:
/*
Get my IP address
*/
import tango.net.http.HttpGet;
import tango.io.Stdout;
void main()
{
try
{
auto page = new HttpGet ("http://automation.whatismyip.com/n09230945.asp");
Stdout(cast(char[])page.read);
}
catch(Exception ex)
{
Stdout("An exception occurred");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑python代码应该像:
from urllib import urlopen
print urlopen('http://automation.whatismyip.com/n09230945.asp').read()
Run Code Online (Sandbox Code Playgroud)
mcr*_*mcr 11
瞄准www.whatsmyip.org很粗鲁.他们请求不要在页面上这样做.
只有与目标处于同一NAT级别的系统才会看到相同的IP.例如,您的应用程序可能落后于多层NAT(当您离开美国时,这种情况会更多,因为美国的IP过剩).
STUN确实是最好的方法.通常,您应该计划在应用程序可以询问的某个地方运行(STUN)服务器:不要硬编码其他人的服务器.您必须编写代码以发送一些特定的消息,如rfc5389中所述.
我建议阅读和相关链接. http://www.ietf.org/html.charters/behave-charter.html
您可能更愿意查看IPv6和Teredo以确保始终具有IPv6访问权限.(微软Vista让这很容易,我被告知)
无论什么时候我想这样做,我都会抓住whatismyip.org.当您访问该网站时,它会为您提供纯文本公共IP.干净利落.
只需让您的脚本访问该站点并阅读IP即可.
我不知道您是否在帖子中暗示这一点,但是无法从您自己的计算机上获取您的公共IP.它必须来自外部来源.
2013编辑:此网站现在返回图像而不是文本,因此它没有用于此目的.
我喜欢ipify.org:
$ curl api.ipify.org
167.220.196.42
$ curl "api.ipify.org?format=json"
{"ip":"167.220.196.42"}
Run Code Online (Sandbox Code Playgroud)
编辑:curlmyip.com不再可用.(感谢maxywb)
原帖:
撰写本文时,curlmyip.com有效.从命令行:
curl curlmyip.com
Run Code Online (Sandbox Code Playgroud)
这是一个第三方网站,可能会在未来几年内提供或不提供.但就目前而言,这看起来非常简单.