Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python将ip地址指定为公共ip地址?_Python_Sockets - Fatal编程技术网

python将ip地址指定为公共ip地址?

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

在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.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()