私は主にsocket
を使ってイーサネット(IEEE 802.2/3)フレームを読み込もうとしています。 アプリケーションは、イーサネットフレームをスニッフィングするだけで、コンテンツに応じて動作します。しかし、Windows上でこれを行う方法に関する情報はほとんどありません。デフォルト(UNIXの方法)はsocket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))
です。これは明らかにwinsockには存在しません。だから私はethフレームを嗅ぐのですか?Python Windows上でソケットを使用してイーサネットフレームを読み取りますか?
IPの代わりにsocket.bind()
を使用してMACにバインドする必要があると思われます。コードの
私の現在の作品:
def _receive(interface): #Receive Eth packets.
#Interface = '192.168.0.10'
sock2 = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
sock2.setsockopt(socket.SOL_IP, socket.IP_HDRINCL, 1))
sock2.bind((interface, 0))
while True:
data, sender = sock2.recvfrom(1500)
handle_data(sender, data)
はどこにも私を取得していません。私は、Wiresharkの中にローカル接続上のパケットを参照してください、それはPythonで取り上げていない。.. Linux上
、私はsock_raw = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_802_2))
を行うことができ、その後、結合してsetsockopt(sock_raw, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mreq, sizeof(mreq))
私はあまりにも多くの外部に依存する必要はありませんしたいと思いますライブラリーは配布されていてかなり軽量であるはずだからです。 pip install
- 可能なパッケージはOKですが、インストーラにバンドルすることができます。
それは実際には動作するためにはmingwでコンパイルする必要があります。私はそれが私のマシンに一度インストールされていることを知っていません。それは仕事にそれを得るために多くの毛羽のように思える。私はmingwでそれを構築しようとします – enrm