Что я хочу сделать, так это создать свой собственный протокол транспортного уровня на C ++.Я не могу понять, как создать необработанный сокет, который автоматически разрешает IP-заголовки и оставляет его на усмотрение меня, чтобы установить полезную нагрузку.
Мне удалось получить пакеты на сервере, используя
socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP))
, но не удалось создать клиента, который может отправлять данные на сервер.(Я даже не уверен, является ли вышеуказанный сокет L2 или L3)
Из того, что я понял из чтения необработанных сокетов, сокет L3 будет выглядеть так:
socket(AF_INET, SOCK_RAW, protocol)
Дело в том,Я не знаю, что заполнять для протокола, если я собираюсь создать свой собственный, а не использовать существующие.(Я испробовал многие из номеров iana, включая диапазон 143-252)
Итак, вопрос в том, как создать сокет, сервер и клиент на стороне, поверх интернет-протокола, чтобы два компьютера моглиобщаться по произвольному протоколу (или отправлять данные друг другу)?Другими словами, я хочу указать конечный IP-адрес и полезную нагрузку, а сокет позаботиться о заголовке IP.
Что у меня сейчас есть:
server.cpp: https://pastebin.com/yLMFLDmJ
client.cpp: https://pastebin.com/LWuNdqPT