2014-01-23 4 views
11

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

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

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

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

Цистерны !! :-)

+0

«Текущая реализация использует оболочку libpcap под Linux. Нам нужно перенести этот инструмент в Windows. Конечно, на данный момент это невозможно». Предположительно, потому что [WinPcap] (http://www.winpcap.org) не будет работать по какой-то причине, не так ли? –

ответ

7

Вы должны иметь возможность использовать ipv4 package от go.net.

Пакет ipv4 реализует опций сокета IP-уровня для версии интернет-протокола 4.

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

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

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

4

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

Смежные вопросы