2016-07-25 21 views
0

私は主に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ですが、インストーラにバンドルすることができます。

答えて

0

Pythonのソケットには盗聴機能はありません。そのような単純な。

オペレーティングシステムでネットワークスタックを使用するという考えは、プログラムが特定のタイプのパケットをそれらに配信するための "登録"プログラムです - 通常これはIPポートでリッスンするようなものです。生のイーサネットパケットの1〜2レベル。

すべての未処理のイーサネットパケットを取得するには、オペレーティングシステムのネットワークスタックにそれをサポートするための何らかのドライバ/インターフェイスが必要です。 wiresharkがWinPcapを必要とする理由です。

おそらく、pypcapで、おそらくPyPi/pipをインストールできると思います。

+0

それは実際には動作するためにはmingwでコンパイルする必要があります。私はそれが私のマシンに一度インストールされていることを知っていません。それは仕事にそれを得るために多くの毛羽のように思える。私はmingwでそれを構築しようとします – enrm