我正在尝试编写一个 python 程序,该程序将产生多个客户端与网络上的一台服务器通信。我的问题是我需要做什么来为每个客户端模拟不同的 IP 地址?
我现在正在使用带有 Python 2.6 的 MAC OSX Lion。
我已经开发了可以接受多个套接字的服务器端。我想避免为每个客户配备一台机器。对于新手的任何提示/提示将不胜感激。
我正在尝试编写一个 python 程序,该程序将产生多个客户端与网络上的一台服务器通信。我的问题是我需要做什么来为每个客户端模拟不同的 IP 地址?
我现在正在使用带有 Python 2.6 的 MAC OSX Lion。
我已经开发了可以接受多个套接字的服务器端。我想避免为每个客户配备一台机器。对于新手的任何提示/提示将不胜感激。
即使这是一个老问题,它仍然出现在谷歌......
如前所述,基本上它将采用接收连接的IP并分配下一个可用端口......所以使用标准套接字......你最终会得到一堆来自同一个IP的不同端口的连接。
就我个人而言,创建一个将生成所需数量的客户端的客户端脚本更容易(我正在使用来自单个 python 脚本的 1000 多个客户端)..
生成客户端后,让脚本为每个客户端生成一个 IP。如果您正确处理连接对象。您可以随时参考您想要的客户端。
所以最后,你的所有客户端都来自同一台机器或网络上的另一台机器,但你只是有一个随机/生成的 IP 地址的变量,你可以用它来测试.. 使用生成的 IP 只需要几行地址作为对您的套接字对象的引用。
如果您想使用特定于 IP 的东西,例如只允许来自特定子网的连接。只需在连接时生成假 IP 地址并像使用真实 IP 地址一样使用它。
如果您只想拥有多个客户端,则根本不需要生成 IP 地址,因为一切都是不同的端口。
提取示例目的:
for i in xrange(1, self.iCount + 1):
if len(self.objClients) >= self.iCount:
break
#Generate a uid ... sID = xxxxxx+i
if sID not in self.objClients:
oPosData = []
self.objClients[i] = {"id":sID, "current":0, "connected":True}
for oT in self.objClients:
try:
self.objClients[oT]['socket'] = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.objClients[oT]['socket'].connect((self.ServerIP, self.ServerPort))
self.objClients[oT]['timer'] = time.time() + randint(0, 10)
http://docs.python.org/library/socket.html#socket.create_connection
如果提供,source_address 必须是一个 2 元组
(host, port)
,以便套接字在连接之前绑定到它的源地址。
我认为应该这样做。