Мне нужно сделать проект за несколько дней, это базовый интерфейс клиента и сервера. Загвоздка в том, что это должны быть все необработанные сокеты. У меня нет проблем с его созданием, я просто застрял на отправке пакетов.
Сначала я попытался привязать его к интерфейсу 'en1', но он продолжает выдавать ошибку nodename not known
. Когда я привязываю его к своему локальному IP-адресу, он работает нормально. После этого я создал необработанный класс пакета, все в шестнадцатеричном формате. Затем я позвонил на sendto, чтобы отправить его по телеграфу.
Проблема в том, что когда я захватываю пакет с помощью wirehark, он отображается как полезная нагрузка пакета ipv4. Я не хочу, чтобы заголовки делались автоматически, в любом случае это то, для чего был мой класс сырых пакетов. Вы знаете, как я могу удалить эти заголовки?
Вот мой код - только необработанная функция:
def raw():
HOST = gethostbyname('192.168.1.10')
s = socket(AF_INET, SOCK_RAW, IPPROTO_IP)
s.bind((HOST, 0))
s.setsockopt(IPPROTO_IP, IP_HDRINCL, 0) #no headers - it wont work!!
pckt = packet("\x68\x65\x6c\x6c\x6f")
netpacket = pckt.getpacket()
print "Sending.. "
print ""
s.sendto(netpacket, ('192.168.1.1', 80))
data = s.recv(4096)
print data
А вот захваченный пакет с hello в конце:
007f 2809 6da2 28cf daee 2156 0800 4500 004d 1bfc 0000 4000 db59 c0a8 010a c0a8 0101* 007f
2809 6da2 28cf daee 2156 0800 4500 0036 2352 4000 4006 0000 c0a8 010a c0a8 0101 15c0 0050
0000 0000 0000 0000 8010 813b 0000 68656c6c6f -hello
* Это (0101
) - начало полезной нагрузки, даже если это должно было быть началом пакета. Также я не собираюсь использовать какие-либо другие модули, я должен использовать сокет.