查找我的套接字的公共IP地址?

时间:2014-02-24 20:03:34

标签: python networking

我正在尝试为客户端创建输入服务器的IP地址/端口并连接到它的能力。为此,我需要服务器的公共IP地址/端口。有没有办法做到这一点?到目前为止我尝试过的是......

ip_address = urllib.request.urlopen(<my web server>).read()

只有包含php脚本的Web服务器:

<?php echo $_SERVER["REMOTE_ADDR"]?>

只需存储

中的端口
s.bind(('', port))

连接到此IP地址和端口超时。有更好的方法吗?

编辑: 好吧基本上我正在尝试通过互联网建立连接,而不知道我的路由器将要做什么。如有必要,我可以使用带有任何代码的网络服务器,因为我可以访问永久网站空间。这就是我现在所拥有的。

服务器:

import urllib.request
import threading
import socket

socket_list = []
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('', 0))

s.listen(10)


def listener(socket):
    while(1):
        data = socket.recv(1024)
        print (data)

def accepter():
    while(1):
        socket, addr = s.accept()
        socket_list.append(socket)
        threading.Thread(target = listener, args = (socket,)).start()

ip_address = (urllib.request.urlopen("<MY WEB SERVER HERE>").read()).decode('utf-8')
print (ip_address)
print (s.getsockname()[1])

threading.Thread(target = accepter, args = ()).start()

客户端:

import socket

print ("Enter IP Address")
ip_address = input()
print ("Enter Port")
port = int(input())

s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s2.connect((ip_address, port))s2.send("Connected!")
s2.close()

当我运行客户端时,我正在输入服务器输出的IP地址和端口。不用说,这不起作用。

1 个答案:

答案 0 :(得分:1)

我认为这是一个很好的问题,你可以这样做,如果你不想像你一样设置你的服务器:

""" Easy IP Getter """
import json
import urllib2

info = json.loads(urllib2.urlopen("http://jsonip.com").read())
ip = info["ip"]
print ip

这取决于外部服务但不是最好的,如果他们停止工作你就会停止工作。