Our world is worth fighting for

—— Mei-Ling Zhou

IPS网络层在go中的简单使用

11 Mar 2017

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.