servport = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
servport.bind( (socket.gethostname(), 0) )
wrapper = 'doing.py'
pid = os.fork()
if not pid:
argv = [sys.executable, wrapper, '%s:%d' % servport.getsockname()]
os.execv(argv[0], argv)
try:
print "do.py: someone connect to me"
servport.listen(1)
(send_sock, got_addr) = servport.accept()
print "do.py: connected from %s" % str(got_addr)
在doing.py
中print "doing.py: got %s" % str(sys.argv)
(host, port) = sys.argv[1].split(':')
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect( (host,port) )
我看到'%s:%d' % socket.getsockname()
给出了127.0.1.1:36802
但我的公共IP地址是以98开头的。。。* 如果我在我的盒子(ubuntu)上做ifconfig,我的wlan0为192.168。。
我阅读并了解到有不同类别的IP地址和127. 。。*基本上是说数据包的目的地是在同一台机器上运行的另一个应用程序。
我如何编码以便'%s:%d' % socket.getsockname()
发出我的98. 。。*?
来自建议, 如果我在do.py
中更改为servport.bind( ('0.0.0.0', 0) )
我得到了
do.py:有人联系我
doing.py:得到了''doing.py',0.0.0.0:41107']
do.py:从('127.0.0.1',43871)连接
这是否意味着我的数据包实际发送到我的网络之外并回来了? < -----
答案 0 :(得分:0)
引用此问题:Finding local IP addresses using Python's stdlib
使用socket.getfqdn解析您的限定主机名。
然后使用socket.gethostbyname将其转换为可解析的IP地址
就像这样
>>>来自socket import gethostbyname,getfqdn
>>>的gethostbyname(getfqdn())
'0.0.0.0'