我有一个关于使用golang进行tcp数据包嗅探的问题。 我们编写了一个小工具,可以捕获从光纤Tap传来的所有传入的TCP数据包。
当前实现在Linux下使用libpcap包装器。我们需要将此工具移植到Windows。当然,目前还不可能。
所以我的问题是,是否有一个用于嗅探数据包的跨平台解决方案?我们只需要TCP数据包,IP头,没有以太网数据,也不需要libpcap的所有功能。
如果没有跨平台解决方案,那么两个Code实现也可以。我知道可以在Linux下使用原始套接字(在Windows下有一些限制)。 Golang是否支持原始套接字,是否有一个用套接字嗅探数据包的示例实现?
坦克!! :-)
答案 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。