Принимаю от клиента пакет с SYN-запросом на установление TCP сессии. Отвечаю пакетом SYN-ACK. При отправке через socket.sendto(string, address), где string - это IP и TCP заголовки. Реализовано через raw sockets на Python. Соединение происходит так:
host = "127.0.0.1"
port = 8000
act_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
act_socket.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
act_socket.bind((host, port))
Вот что мне приходит:
IP header
|-Version : 4
|-IP Header Length : 5
|-Type of Service : 0
|-Identification : 9161
|-TTL : 64
|-Offset : 16384
|-Protocol : 6
|-IP Chechsum : 6385
|-Source Address : 127.0.0.1
|-Dest. Address : 127.0.0.1
TCP header
|-Source Port : 35509
|-Dest Port : 8000
|-Sequence Number : 4150096415
|-Acknowledgement : 0
|-TCP header length : 10
|-TCP flag : 2
|-Window : 43690
|-Checksum : 65072
|-Urgent Pointer : 0
Вот что я отправляю:
IP header
|-Version : 4
|-IP Header Length : 5
|-Type of Service : 0
|-Identification : 9161
|-TTL : 64
|-Offset : 16384
|-Protocol : 6
|-IP Chechsum : 0
|-Source Address : 127.0.0.1
|-Dest. Address : 127.0.0.1
TCP header
|-Source Port : 8000
|-Dest Port : 35509
|-Sequence Number : 4150096416
|-Acknowledgement : 0
|-TCP header length : 10
|-TCP flag : 12
|-Window : 43690
|-Checksum : 0
|-Urgent Pointer : 0
Насколько я читал (
здесь, например), ядро Linux автоматически считает чексуммы для IP и TCP заголовков.
В итоге получаю ошибку:
sock.sendto(new_packet, addr)
socket.error: [Errno 1] Operation not permitted
В чем я ошибаюсь?