在Golang的原始插座嗅探

时间:2014-01-23 22:05:04

标签: networking go libpcap sniffing

我有一个关于使用golang进行tcp数据包嗅探的问题。 我们编写了一个小工具,可以捕获从光纤Tap传来的所有传入的TCP数据包。

当前实现在Linux下使用libpcap包装器。我们需要将此工具移植到Windows。当然,目前还不可能。

所以我的问题是,是否有一个用于嗅探数据包的跨平台解决方案?我们只需要TCP数据包,IP头,没有以太网数据,也不需要libpcap的所有功能。

如果没有跨平台解决方案,那么两个Code实现也可以。我知道可以在Linux下使用原始套接字(在Windows下有一些限制)。 Golang是否支持原始套接字,是否有一个用套接字嗅探数据包的示例实现?

坦克!! :-)

2 个答案:

答案 0 :(得分:8)

您应该可以使用ipv4 package中的go.net

  

Package ipv4实现了Internet协议版本4的IP级套接字选项。

ipv4.RawConn类型及其关联的方法应该跨平台工作。

  

RawConn表示使用IPv4传输的分组网络端点。它用于控制多个IP级套接字选项,包括IPv4标头操作。它还提供特定于IPv4和更高层协议的基于数据报的网络I / O方法,这些协议直接处理IPv4数据报,例如OSPF,GRE。

还有ipv6的等效包。

答案 1 :(得分:5)

看看https://code.google.com/p/gopacket/因为它支持pcap(需要cgo),并且可以解码许多协议,包括tcp / ip。