0

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)

やっている.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 を実行すると、192.168 の wlan0 があります。.

IP アドレスと 127 にはさまざまなクラスがあることを読んで理解しました.* は、基本的に、パケットが同じマシンで実行されている別のアプリに向けられていることを示しています。

'%s:%d' % socket.getsockname()98 を出すようにコーディングするにはどうすればよいですか.*?


servport.bind( ('0.0.0.0', 0) )提案から、do.pyでに変更した場合

私は
do.py を取得します: 誰かが私に接続します
doing.py: 得 ['doing.py', 0.0.0.0:41107'
]

これは、パケットが実際にネットワークの外に送信されて戻ってきたということですか? <-----

4

1 に答える 1

0

この質問の参照: Finding local IP addresses using Python's stdlib

socket.getfqdn を使用して、修飾されたホスト名を解決します。

次に、socket.gethostbyname を使用して、解決可能な IP アドレスに変換します。

ちょうどこのような

>>> ソケットからのインポート gethostbyname、getfqdn

>>> gethostbyname(getfqdn())

'0.0.0.0'

于 2013-09-14T17:56:31.383 に答える