Scapy SYN отправляет на наш собственный IP-адрес

Я пытался отправлять SYN-пакеты в свою локальную сеть и отслеживать их с помощью Wireshark, и все работает нормально, за исключением случаев, когда я пытаюсь отправить пакет на свой собственный IP-адрес, он «кажется» работать, потому что он говорит, что пакет отправлен 1, но это на самом деле не отправлено, я не вижу ни пакета в Wireshark, ни ответов на пакет. Моя установка — это компьютер A (192.168.0.1) с сервером TCP Socket, прослушивающим порт 40508, и компьютер B (192.168.0.2).

На компьютере B я тестирую:

ip=IP(src="192.168.0.2",dst="192.168.0.1")  
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345)
send(ip/SYN)

Он работает нормально, я вижу пакет SYN на Wireshark и ответ SYN/ACK от 192.168.0.1.

На компьютере A я тест:

ip=IP(src="192.168.0.1",dst="192.168.0.2")  
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345)
send(ip/SYN)

Он тоже работает нормально, я вижу пакет SYN и ответ RST/ACK (сервер не прослушивает порт 40508 на 192.168.0.2, поэтому он отправляет RST/ACK) ответ от 192.168.0.2

Но когда я пытаюсь на компьютере A:

ip=IP(src="192.168.0.2",dst="192.168.0.1")  
SYN=TCP(sport=40508,dport=40508,flags="S",seq=12345)
send(ip/SYN)

В Wireshark ничего не появляется, как будто пакет никогда не отправлялся, но он сказал, как и другие тесты: «Отправлено 1 пакет». и не вернул никакой ошибки. Если я запускаю тот же тест на компьютере B и пытаюсь отправить пакет на его собственный IP-адрес, у меня возникает та же проблема.

Для моей программы мне действительно нужно отправить пакет SYN на мой собственный IP-адрес, есть ли способ сделать это или это невозможно?

Заранее спасибо,

нолийский


person Nolhian    schedule 10.07.2010    source источник


Ответы (1)


Какие сетевые устройства прослушивает ваша установка Wireshark? Я подозреваю, что он прослушивает настоящую сетевую карту (ethernet, wifi или что-то еще, согласно Wireshark FAQ) -- и при отправке с компьютера на себя ОС, конечно, может обойти устройство (зачем с этим возиться?) и просто выполнить "отправку", копируя биты внутри стека TCP/IP в память ядра.

Другими словами, я подозреваю, что ваш пакет отправляется нормально, просто Wireshark может его не увидеть. Чтобы проверить эту гипотезу, вы можете попробовать (например) с помощью браузера посетить существующие и несуществующие порты на вашем локальном компьютере и посмотреть, видит ли Wireshark эти пакеты или нет.

person Alex Martelli    schedule 10.07.2010
comment
Другими словами, пакет отправляется через петлевой интерфейс. - person Borealid; 10.07.2010
comment
Спасибо за ваши ответы, я проверил, и это точно, пакет находится на петлевом интерфейсе, wireshark его видит на lo. Поскольку у меня нет ответа SYN/ACK от пакета, я предполагаю, что он никогда не достигает 192.168.0.1, я также попытался установить другой порт, на котором ничего не прослушивалось, и до сих пор нет ответа RST/ACK. Итак, я попытался заставить сервер слушать 127.0.0.1 вместо 192.168.0.1, но все равно ничего, сгенерированный пакет отправляется по петле, но он не отвечает. Если сервер находится на 127.0.0.1, и я пишу клиент Python с подключением к сокету TCP, он работает нормально... - person Nolhian; 10.07.2010
comment
Я действительно потерялся :( Любая идея о том, почему он никогда не отвечает локально, но это происходит, когда тот же сгенерированный пакет отправляется другим компьютером или когда TCP-сокет пытается подключиться (даже локально)? - person Nolhian; 10.07.2010
comment
Большое спасибо за вашу помощь, нашел вторую часть ответа там: secdev.org/projects/scapy/ doc/ если люди, проходящие мимо, тоже ищут решение :) - person Nolhian; 10.07.2010
comment
@Nolhian, +1 - не думал проверять документы scapy, просто рассуждал здесь в общих терминах TCP / IP. - person Alex Martelli; 10.07.2010
comment
Да, я видел это, и это было действительно хорошо аргументировано и полезно. Ваш ответ определенно был причиной, по которой я искал проблему обратной связи, еще раз спасибо;) - person Nolhian; 11.07.2010
comment
К вашему сведению, Rawcap может перехватывать пакеты на петлевом интерфейсе (в Windows) и выводить их в Wireshark. - удобный формат. - person Matt Lyons; 28.03.2012