IPS中最长用到的是transport layer(UDP 或者 TCP 居多). GO 对 IPS的低层使用也很方便。
当你需要自制packet,那么你就需要在IP layer 经行操作了。
接收代码(icmp 协议为例)
package main
import (
"fmt"
"net"
)
func main() {
protocol := "icmp"
netaddr, _ := net.ResolveIPAddr("ip4", "127.0.0.1")
conn, _ := net.ListenIP("ip4:"+protocol, netaddr)
buf := make([]byte, 512)
read, _, _ := conn.ReadFrom(buf)
fmt.Printf("% X\n", read[:c])
}
build
之后以root用户执行 如 sudo ./test
(因为 raw socks man 7 raw 只支持 ID 为0 的用户操作)
当我们ping localhost
怎么打印出以 08 开头 Echo Request
.