Как мне ответить пакетом syn ack при получении пакета syn через необработанный сокет? - PullRequest
0 голосов
/ 07 марта 2012

Мне интересно узнать о сырых сокетах и ​​о том, как их создавать, и я хотел бы реализовать свой собственный механизм TCP.Я прочитал несколько примеров и преуспел в отправке как пользовательских TCP-пакетов, так и UDP-пакетов с моим собственным написанным IP-заголовком (конечно, под влиянием множества примеров).Я проверил с помощью Wireshark, что пакет достигает своего места назначения, поэтому пока все в порядке.

Но что касается TCP-пакетов, чтобы выполнить полное рукопожатие:

Client     Server
syn  ---> 
     <---  syn ack 
ack  --->

Что мне нужнос точки зрения сервера, чтобы получить пакет syn, чтобы я мог отправить syn ack обратно клиенту?

1 Ответ

1 голос
/ 20 марта 2013

Чтобы получать пакеты в необработанном сокете, просто наберите recv или recvfrom на нем.ОС вернет вам копию следующего пакета, адресованного машине, с заголовками и всем, что должно включать информацию об адресе.Следите за адресом назначения, портом и транспортным протоколом и игнорируйте все, что не соответствует вашим ожиданиям.(Поскольку точка необработанного сокета заключается в том, что отсутствует встроенное понятие портов или чего-либо еще, что операционная система могла бы использовать для маршрутизации пакетов в сокеты, она не знает, в какую программу отправлять ее ... поэтому каждый необработанный сокет должен получатькаждый пакет адресован машине. Это означает, что вы можете получить много дерьма, которое вас не интересует.)

Как только вы увидите пакет, адресованный «вам», просто создайте пакет SYN / ACK и отправьте егоадрес и порт, указанные в качестве источника в полученном пакете.

Обратите внимание, однако: ОС часто выполняет свою собственную обработку пакетов TCP и UDP (включая отправку ICMP "порта недоступен" или других ответов для портов, которые она не делает.у меня нет слушателей) ... и выполнение вашей собственной обработки, помимо всего прочего, неизбежно вызовет дурачество.Если вы собираетесь реализовать свой собственный вариант протокола TCP, вы можете использовать другой номер протокола.(Конечно, тогда большинство клиентов не смогут подключиться к нему ... вам также придется сделать клиента.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...