Сырой сокет, обнюхивающий в Голанге

У меня есть вопрос о том, как обманывать пакет tcp с помощью golang. Мы написали небольшой инструмент, который фиксирует все входящие TCP-пакеты, поступающие с волоконного Tap.

В текущей реализации используется оболочка libpcap в Linux. Нам нужно перенести этот инструмент в Windows. Конечно, на данный момент это невозможно.

Итак, мой вопрос в том, есть ли кросс-платформенное решение для обнюхивания пакетов? Нам нужны только TCP-пакеты, IP-заголовки, нет данных Ethernet, а не все функции libpcap.

Если нет кроссплатформенного решения, будет реализована и реализация двух кодов. Я знаю, что в Linux можно использовать сырые сокеты (и с некоторыми ограничениями под Windows). Поддерживает ли Golang сырые сокеты и есть ли пример реализации для обнюхивания пакетов с сокетами?

Танки!!:-)

Ответ 1

Вы можете использовать ipv4-пакет из go.net.

Пакет ipv4 реализует параметры сокета уровня IP для версии протокола Интернета.

Тип ipv4.RawConn и связанные с ним методы должны работать кросс-платформенными.

A RawConn представляет конечную точку пакетной сети, использующую транспорт IPv4. Он используется для управления несколькими параметрами сокета уровня IP, включая манипулирование заголовками IPv4. Он также предоставляет методы сетевого ввода-вывода на основе датаграммы, специфичные для протоколов IPv4 и более высокого уровня, которые обрабатывают дейтаграмму IPv4 напрямую, например OSPF, GRE.

Существует также эквивалентный пакет для ipv6.

Ответ 2

Взгляните на https://code.google.com/p/gopacket/, так как он поддерживает pcap (для этого требуется cgo) и может декодировать несколько протоколов, включая tcp/ip.