如何在Python中获取套接字的外部IP?

ver*_*rix 9 python sockets

当我调用socket.getsockname()套接字对象时,它返回我机器的内部IP和端口的元组.但是,我想检索我的外部IP.这样做最便宜,最有效的方式是什么?

Joh*_*kin 8

如果没有外部服务器的合作,这是不可能的,因为您和另一台计算机之间可能存在任意数量的NAT.如果它是自定义协议,您可以要求另一个系统报告它所连接的地址.


Cod*_*ous 5

我能想到的唯一可以保证给你的方法就是点击http://whatismyip.com/这样的服务来获取它.


小智 5

https://github.com/bobeirasa/mini-scripts/blob/master/externalip.py

'''
Finds your external IP address
'''

import urllib
import re

def get_ip():
    group = re.compile(u'(?P<ip>\d+\.\d+\.\d+\.\d+)').search(urllib.URLopener().open('http://jsonip.com/').read()).groupdict()
    return group['ip']

if __name__ == '__main__':
    print get_ip()
Run Code Online (Sandbox Code Playgroud)

  • 不知道 jsonip.com--谢谢。这是您的答案的更多“jsonic”变体(自动格式化会弄乱网址): json.loads(urllib2.urlopen(urllib2.Request('http://jsonip.com/', headers = {'Content-类型': 'application/json'})).read())['ip'] (2认同)