RawSocket是原始套接字,即可以接受并处理到网卡上的原始数据帧或数据包,而不经过内核的TCP/IP层的处理。
在Go语言的net库里,我们可以使用iprawsocket里的ListenIP来获得创建原生Socket的能力。注意这个是网络层的原生socket,即TCP/UDP层的数据信息需要我们手动解析。
监听数据包
package main
import (
"fmt"
"net"
)
func main() {
protocol := "icmp"
netaddr, _ := net.ResolveIPAddr("ip4", "127.0.0.1")
//如果第二个string参数设置成零值,那么就监控所有源的网络包
conn, err := net.ListenIP("ip4:"+protocol, netaddr)
if err != nil