Я хочу прослушивать IP-пакеты, а затем изменить поле ToS на 1 и добавить параметры в заголовок IP, а затем отправить измененный пакет вместо исходного пакета.
Я обнаружил, что это можно сделать с помощью scapy, но, похоже, это не работает.
Кто-нибудь может мне с этим помочь?
from scapy.all import *
from scapy.layers.inet import IP
def chgSend(x):
x[IP].tos = 1
send(x)
while 1:
sniff(filter = "ip src host 10.0.0.2", prn=chgSend)
Помогает ли смена send(x) на sendp(x)?
@BrianBienvenu Я использовал sendp(x), и он начал отправлять много пакетов после захвата первого пакета!
Звучит лучше. У вас есть while 1:, поэтому он будет постоянно захватывать пакеты, а затем повторно отправлять их. Я думаю, вероятно, ваш снифф видит пакеты, сгенерированные Scapy's sendp() - он фактически сам себя питает. Вам нужно будет добавить в свой код дополнительную логику, чтобы это остановить.






Теперь я могу подделать IP-адрес и изменить поле ToS с помощью этого кода:
from scapy.all import *
from scapy.layers.inet import IP
def change_send(pckt):
actual_src = pckt[IP].src
pckt[IP].src = "192.168.1.5"
pckt[IP].tos = 1
sendp(pckt)
print("We changed source from " + actual_src + " to " + pckt[IP].src)
while 1:
sniff(filter = "ip src host 192.168.1.2", prn=change_send)
Если вы не хотите менять исходный IP-адрес, убедитесь, что вы не застряли в бесконечном цикле.
Вы также должны установить каждую контрольную сумму на None, чтобы они правильно пересчитывались при отправке.
любое предложение?