私は全く新しいscapyを使用しています。私はこれを使用して私のLANのDHCPモニタを構築しようとしています。私はprn=
パラメータを介してコールバックに送信されるパケットをキャプチャするためにsniff
を使用しています。コールバックの中で、パケットにDHCP
のレイヤーがあるかどうかを確認してから、要求のタイプをチェックします。Scapy:キャプチャされたDHCPパケットのメッセージタイプを確認してください
私は現在、このようにそれをやっている:私はDHCP層にoptions
にアクセスしてい
def manage(pkt):
if pkt.haslayer(DHCP):
req_type = [x[1] for x in pkt[DHCP].options if x[0] == 'message-type'][0]
# Message type: request
if req_type == 3:
print ("Request from {}".format(pkt[Ether].src))
sniff(prn=manage, count=0, store=0)
方法は、一種の厄介ですが、それは私がその作品を作ってみただけです。しかし、私は、dict
または何かを介してより良い、よりpythonic方法がなければならないと信じています。
これらのオプションにはどのような方法でアクセスできますか?
これに役立つ回答があるのが不思議です。私は、あなたが今やっていることよりも、もっと「組織化された」ものは何かしているとは言えません。問題は、DHCPがbootpペイロードにオプションのリストを投げることだけです。特別なオプションは必要なく、特別な注文は必要ありません。同じタイプの複数のオプション(ルータ、DNSサーバなど)を持つことが可能です。したがって、動作する明らかなdictタイプのフレームワークはありません。複数のメッセージタイプを持つことは実際には意味がありません。そして、しばしば最初になるだろうが、何もないとは言いません。 –