小编Dav*_*ton的帖子

如何使用Golang组合原始TCP数据包(使用gopacket)并通过原始套接字发送它

我想使用gopacket制作客户端TCP数据包,然后使用原始套接字发送它们.

这是一个简短易读的示例程序,演示了我想要做的事情:

package main

import (
    "code.google.com/p/gopacket"
    "code.google.com/p/gopacket/examples/util"
    "code.google.com/p/gopacket/layers"
    "log"
    "net"
)

func main() {
    defer util.Run()()

    // XXX create tcp/ip packet
    srcIP := net.ParseIP("127.0.0.1")
    dstIP := net.ParseIP("192.168.0.1")
    //srcIPaddr := net.IPAddr{
    //  IP: srcIP,
    //}
    dstIPaddr := net.IPAddr{
        IP: dstIP,
    }
    ipLayer := layers.IPv4{
        SrcIP:    srcIP,
        DstIP:    dstIP,
        Protocol: layers.IPProtocolTCP,
    }
    tcpLayer := layers.TCP{
        SrcPort: layers.TCPPort(666),
        DstPort: layers.TCPPort(22),
        SYN:     true,
    }
    tcpLayer.SetNetworkLayerForChecksum(&ipLayer)
    buf := gopacket.NewSerializeBuffer()
    opts := gopacket.SerializeOptions{
        FixLengths:       true,
        ComputeChecksums: true,
    }
    err := gopacket.SerializeLayers(buf, opts, &ipLayer, &tcpLayer)
    if …
Run Code Online (Sandbox Code Playgroud)

sockets tcp raw-sockets go gopacket

7
推荐指数
1
解决办法
1万
查看次数

标签 统计

go ×1

gopacket ×1

raw-sockets ×1

sockets ×1

tcp ×1