0

メッセージに別の送信元アドレスを設定できるように、このpingの実装を変更しようとしています。私がやりたい-Sのは、元のpingのオプションで実行できることとまったく同じです。

ifconfig em0 10.0.1.1 netmask 255.255.255.0 alias
ifconfig em0 10.0.2.1 netmask 255.255.255.0 alias
ping -c4 -S 10.0.1.1 10.0.2.1

これはもちろん機能しますが、Pythonでも同じことをしたいと思います。

4

1 に答える 1

3

あなたが示しているサンプルコードは、を使用IPPROTO_ICMPして特定のアドレスにバインドできるソケットを使用していますbind()

したがって、行の直後にmy_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp)次を追加できます。

my_socket.bind((your_source_address, 0))

タプルの 2 番目の引数はポート番号で、 によって無視されるようIPPROTO_ICMPです。

オペレーティングシステムでは、ソケットを任意のアドレスにバインドすることは許可されていない場合がありますが、ホストに属する有効なアドレスのみが許可されていることに注意してください。おそらく、これで十分です。完全に任意の送信元アドレスを設定したい場合は、IPPROTO_RAW代わりにソケットを使用し、IP パケット ヘッダー全体を自分で作成する必要があります。いくつかの指針については、この質問を参照してください: How Do I Use Raw Socket in Python?

于 2012-08-20T13:44:27.823 に答える