python将ip地址指定为公共ip地址?
在do.py中python将ip地址指定为公共ip地址?,python,sockets,Python,Sockets,在do.py中 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.exec
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)
在做的时候
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:get['doing.py',0.0.0.0:41107']
do.py:连接自('127.0.0.1',43871)
这是否意味着我的数据包实际上是从我的网络之外发送回来的 关于这个问题: 使用socket.getfqdn解析您的限定主机名 然后使用socket.gethostbyname将其转换为可解析的ip地址 就这样 >>>从套接字导入gethostbyname、getfqdn >>>gethostbyname(getfqdn()) “0.0.0.0”
如果绑定IP地址0.0.0.0,则会绑定所有可用接口,包括公共接口。请使用空字符串(表示
INADDR\u ANY
)而不是gethostname()
。