TCP SYN, отправленный со Scapy, никогда не получен сервером и не замечен Wireshark в интерфейсе обратной связи

У меня проблема с очень простым использованием Scapy в Windows 7 (Python 3.6, Scapy 2.4.0). Я также использую Npcap 0.99r7 и Wireshark 2.6.2 в этой системе. Система имеет только один интерфейс беспроводной сети плюс интерфейс обратной связи Npcap.

Я настроил этот очень классический TCP-сервер...:

import socket

host = '127.0.0.1'
port = 8089
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
connection, address = s.accept()
while 1:
    try :
        data = connection.recv(1024)
    except ConnectionAbortedError:
        break
    if data:
        print('Received: %s' % (data.decode ('utf-8')))
    connection.sendall('Data received'.encode())
connection.close()
s.close()

... и я настроил этот очень классический TCP-клиент:

import socket

host = '127.0.0.1'
port = 8089
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.send('Hello, world!'.encode())
data = s.recv(1024)
print('Received: %s' % (data.decode('utf-8')))
s.close()

Оба отлично работают. Wireshark сообщает обо всем трафике TCP через интерфейс обратной связи.

Теперь я запускаю сервер и пытаюсь запустить этот фрагмент кода, который просто отправит SYN на сервер с помощью Scapy:

from scapy.layers.inet import IP
from scapy.layers.inet import TCP
from scapy.sendrecv import *

dstHost='127.0.0.1'
dstPort = 8089
packet = IP(src='127.0.0.1', dst=dstHost)/TCP(dport=dstPort, flags='S')
response=sr1(packet, timeout=10)
response.display()

Отчеты Python:

Begin emission:
..Finished sending 1 packets.
......Traceback (most recent call last):

  File "R:/Documents/Projets/python/hacking/scan.py", line 46, in <module>
    response.display()
AttributeError: 'NoneType' object has no attribute 'display'
Received 8 packets, got 0 answers, remaining 1 packets

Более того, Wireshark не видит ничего в петлевом интерфейсе. Может кто-нибудь дать подсказку?

Обновление 1

Как и предполагалось, я попробовал более явный код, используя sendp() и не send(), так как мы говорим здесь слой 2:

route_add_loopback()
packet = Loopback()/IP(src='127.0.0.1', dst='127.0.0.1')/TCP(dport=8089, flags='S')
sendp(packet,iface='Npcap Loopback Adapter')

К сожалению, Wireshark не анализирует пакет ни на одном из интерфейсов (Intel® R Centrino® Advanced-N 6235 и Npcap Loopback Adapter).

Обратите внимание, что призыв к route_add_loopback() требуется, или show_interfaces() не будет сообщать о Npcap Loopback Adapter, что означает, что sendp() не удастся. Можно восстановить таблицу маршрутизации Scapy, вызвав conf.route.resync () после route_add_loopback(), но результат тот же: Wireshark не анализирует пакет ни на одном из интерфейсов.

Если кто-нибудь найдет какой-нибудь фрагмент кода Python, работающий в Windows 7, который успешно отправит простой TCP-пакет на 'Npcap Loopback Adapter', он будет рад...

1 ответ

Петлевой интерфейс не является "обычным" интерфейсом; это особенно верно для Windows.

Вы можете проверить маршрут, используемый Scapy для отправки пакета, выполнив: packet.route(),

Если отображаемый маршрут не использует петлевой интерфейс, вы можете попробовать запустить его (это зависит от Windows) route_add_loopback() и попробуй еще раз.

Другой вариант будет использовать srp1() вместо sr1()и укажите петлевой интерфейс как iface= параметр.

Другие вопросы по тегам