scapy: правильный метод для изменения TTL прослушанного трафика

Я играю со Scapy и заметил кое-что странное.

Если я создаю пакет, чтобы вызвать сообщение об ошибке превышения времени ICMP:

myPacket = IP(dst="www.google.com", ttl=3)/TCP()

... я получаю сообщение ICMP после отправки с помощью функции sr,

С другой стороны, если я беру любой исходящий пакет, который я прослушал, и меняю его значение ttl на то же, что использовалось выше, я не получаю никакого ответа.

В чем здесь проблема? Я думал, что смогу испытать это, используя фиктивный трафик, а не реальный трафик! Я даже пытался с другими значениями TTL, но безрезультатно.

2 ответа

Решение

Хорошо, пакеты отбрасывались, потому что, как только я изменил значение ttl, контрольная сумма больше не была правильной. Мне просто пришлось снова вычислить контрольную сумму, удалив ее значение:

del(mypacket.getlayer(IP).chksum) 

Другой вариант - использовать функцию sendp(). Scapy автоматически вычисляет контрольные суммы IP и TCP.

myPacket = IP(dst="www.google.com", ttl=3)/TCP()
sendp(myPacket)

def dissect(pck):
    if pck.haslayer("ICMP"): # Filter out all but ICMP packets.  You could do additional filtering
        pck.show()           # Display response packets

sniff(iface="eth0", prn=lambda x:dissect(x), store=0)
Другие вопросы по тегам