ネットワーク上の1つのサーバーと通信するために複数のクライアントを生成するpythonプログラムを作成しようとしています。私の質問は、クライアントごとに異なる IP アドレスをシミュレートするにはどうすればよいですか?
現在、Python 2.6 で MAC OSX Lion を使用しています。
複数のソケットを受け入れることができるサーバー側は既に開発済みです。クライアントごとにマシンを用意することは避けたいです。初心者向けのヒント/ヒントをいただければ幸いです。
ネットワーク上の1つのサーバーと通信するために複数のクライアントを生成するpythonプログラムを作成しようとしています。私の質問は、クライアントごとに異なる IP アドレスをシミュレートするにはどうすればよいですか?
現在、Python 2.6 で MAC OSX Lion を使用しています。
複数のソケットを受け入れることができるサーバー側は既に開発済みです。クライアントごとにマシンを用意することは避けたいです。初心者向けのヒント/ヒントをいただければ幸いです。
これは古い質問ですが、まだGoogleに表示されます...
すでに述べたように、基本的には、接続が受信された IP を取得し、次に利用可能なポートを割り当てます...したがって、標準ソケットを使用すると、さまざまなポートを持つ同じ IP からの一連の接続が発生します。
個人的には、必要な量のクライアントを生成するクライアント スクリプトを作成する方が簡単です (1 つの 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 は
(host, port)
、ソケットが接続前にソース アドレスとしてバインドするための 2 タプルである必要があります。
そうすべきだと思います。