套接字:使用一台机器/NIC 在 python 中模拟多个客户端



我正在尝试编写一个python程序,该程序将生成多个客户端以与网络上的一台服务器通信。 我的问题是我需要做什么来模拟每个客户端的不同 IP 地址?

我现在正在使用MAC OSX Lion和Python 2.6。

我已经开发了可以接受多个套接字的服务器端。 我想避免为每个客户端配备一台机器。 新手的任何提示/提示将不胜感激。

尽管这是一个古老的问题,但它仍然出现在谷歌中......

如前所述,基本上它将获取接收连接的 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),以便在连接之前绑定到其源地址。

我认为应该这样做。

最新更新