Golang发送原始TCP包遇net.Dial lookup错误求助
问题:使用Go发送原始TCP包时net.Dial报错"no such host"
我正在学习Golang的raw sockets,想要开发一个发送原始TCP包的工具,已自行构建IPv4和TCP头部,参考了网络资料并借助ChatGPT,但调用net.Dial函数时出现如下错误:
dial ip4:tcp: lookup 192.168.0.44:9095: no such host
目标主机可正常ping通,在另一台Linux虚拟机运行该工具时也出现相同错误。工具代码如下:
package main import ( "fmt" "net" "github.com/google/gopacket" "github.com/google/gopacket/layers" ) func main() { /* source_addr := net.IP("192.168.0.254") destination_addr := net.IP("192.168.0.41") source_port := layers.TCPPort(12345) destination_port := layers.TCPPort(9095) */ ipv4_header := &layers.IPv4{ Version: 4, Length: 20, TOS: 0, Id: 1234, FragOffset: 0, TTL: 64, Protocol: 6, Checksum: 0, SrcIP: net.IP{192, 168, 0, 254}, DstIP: net.IP{192, 168, 0, 44}, Options: nil, Flags: layers.IPv4DontFragment, } tcp_header := &layers.TCP{ SrcPort: layers.TCPPort(12345), DstPort: layers.TCPPort(9095), Seq: 123, Ack: 0, SYN: true, Window: 8192, } buffer := gopacket.NewSerializeBuffer() options := gopacket.SerializeOptions{} serializing_error := gopacket.SerializeLayers(buffer, options, ipv4_header, tcp_header) if serializing_error != nil { fmt.Println(serializing_error.Error()) } //connection, connection_error := net.Dial("ip4:tcp", "192.168.0.41") //fmt.Println(fmt.Sprintf("%s:%d", ipv4_header.DstIP.String(), layers.TCPPort(9095))) connection, connection_error := net.Dial("ip4:tcp", "192.168.0.44:9095") if connection_error != nil { fmt.Println(connection_error.Error()) } defer connection.Close() packet := buffer.Bytes() _, sending_error := connection.Write(packet) if sending_error != nil { fmt.Println(sending_error.Error()) } }
另外,我使用ChatGPT生成的Python脚本在Linux虚拟机上监听原始TCP包。
内容的提问来源于stack exchange,提问作者mehmet han
相关产品推荐
相关产品推荐

