Scapy ручное рукопожатие с розеткой принять - PullRequest
0 голосов
/ 28 апреля 2019

Я реализовал TCP рукопожатие, которое работает с некоторыми серверами в Интернете.

Я попытался подключиться к своему локальному демонстрационному серверу, созданному с помощью следующих нескольких строк Python:

import socket
sock = socket.socket(sock.AF_INET, socket.SOCK_STREAM)
sock.bind(("localhost", 5678))
sock.listen(1)
conn, addr = sock.accept()
print(conn, addr)

SYN пакетсоздан с помощью Scapy

from random import getrandbits
ip = IP(dst="127.0.0.1")
tcp = TCP(dport=5678, sport=7890, flags="S", seq=getrandbits(16))
packet = ip / tcp
send(packet)

Когда я проверил поток в Wireshark, для этого пакета не было ответа, но когда я проверил поток на sock.connect(("localhost", 5678)), я увидел, что все в порядке (SYN -> SYN/ACK -> ACK), но контрольная сумма помечена как неверно с сообщением может быть вызвано «Разгрузка контрольной суммы TCP»? .

Когда я пытался получить необработанные пакеты (из этого ответа ) яполучил действительный пакет SYN. ​​

Что не так с пакетом SYN?Как я могу вручную подключиться к серверу, используя socket.accept()?

...