Это мой первый раз с использованием сырых сокетов (да, мне нужно использовать их, поскольку я должен изменить поле внутри сетевого заголовка), и вся документация или учебные материалы, которые я читаю, описывают решение для пакетов нюхания, но это не совсем то, что я необходимость. Мне нужно создать скрипт, который перехватывает пакет, обрабатывает его и отправляет его дальше в пункт назначения, т. Е. Пакеты не должны добираться до места назначения, если только мой скрипт не решит.Могу ли я перехватить сетевые пакеты с сырым сокетом (а не только понюхать)?
Чтобы узнать, я создал небольшой прототип, который обнаруживает пинг и просто печатает «PING». Я ожидаю, что ping не будет работать, поскольку я перехватываю пакеты, и я не включаю логику отправки их в пункт назначения. Тем не менее ping работает (опять же, кажется, что это просто обнюхивание/зеркальное отображение пакетов). Моя цель состоит в том, что пакеты ping «пойманы в ловушку» в моем скрипте, и я не знаю, как это сделать. Это то, что я в моем текущем сценарии питона (я избегаю писать, как я делаю декодирование для простоты)
sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(0x0003))
sock.bind((eth0, 0))
packet = sock.recvfrom(65565)
decode_eth(packet)
decode_ip(packet)
if (ipheader.ip_proto == 1):
print("\nPING")
Может кто-нибудь объяснить, как я могу достичь своей цели или указать мне на правую документацию?