4

私は最近Scapyを探索し始めました。確かに素晴らしいツールです!

問題があります...Wiresharkを使用してネットワークカードを監視し、標準のPINGインストールでシステムコマンドプロンプトから定期的にpingを実行すると、wiresharkがポップアップして「Pingrequest」と「Pingreply」が送信されたことを示します返信。しかし、Scapyで手動で行うと、返信が返されません。どうすればよいでしょうか。私はこれを理解するために多くの時間を費やしたので、誰かが私のこの問題に光を当てることができることを本当に望んでいます...

これが私が使用したコードです:

>>> from scapy.all import IP, ICMP, send
>>> IP = IP(dst="127.0.0.1")
>>> Ping = ICMP()
>>> send(IP/Ping)

パケットは正常に送信され、Wiresharkは受信したPing要求を示しますが、応答が返送されたことは示しません。

4

2 に答える 2

7

これはFAQアイテムです:

127.0.0.1にpingできません。Scapyは127.0.0.1またはループバックインターフェイスでは機能しません

ループバックインターフェイスは非常に特殊なインターフェイスです。それを通過するパケットは、実際には組み立てられたり分解されたりしません。カーネルは、内部構造がまだ保存されている間に、パケットを宛先にルーティングします。あなたが見るtcpdump -i loものは、すべてが正常であるとあなたに思わせるための偽物にすぎません。カーネルはScapyが背後で何をしているのかを認識していないため、ループバックインターフェイスに表示されるものも偽物です。これを除いて、ローカル構造から来たものではありません。したがって、カーネルはそれを受信しません。

ローカルアプリケーションと通信するには、PF_PACKET /SOCK_RAW(またはLinuxの他のシステムでは同等のもの)の代わりにPF_INET / SOCK_RAWソケットを使用して、パケットを1層上に構築する必要があります。

>>> conf.L3socket
<class __main__.L3PacketSocket at 0xb7bdf5fc>
>>> conf.L3socket=L3RawSocket
>>> sr1(IP(dst="127.0.0.1")/ICMP())
<IP  version=4L ihl=5L tos=0x0 len=28 id=40953 flags= frag=0L ttl=64 proto=ICMP chksum=0xdce5 src=127.0.0.1 dst=127.0.0.1 options='' |<ICMP  type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |>>
于 2010-11-22T15:00:52.357 に答える
0

これを試して

def ping(host, repeat=3):
    packet = IP(dst=host)/ICMP()
    for x in range(repeat):
        response = sr1(packet)
        response.show2()

返信が正しく保存されていない

于 2010-11-22T13:45:31.133 に答える