我正在编写用于生成 ICMP 数据包的小代码。为此,我正在关注golang net package 中的代码。我确定了以下用于 ICMP 数据包生成的代码: 109 c, err := Dial(tt.net, tt.raddr) 110 if err != nil { 111 t.Fatalf("Dial failed: %v", err) 112 } 113 c.SetDeadline(time.Now().Add(100 * time.Millisecond)) 114 defer c.Close() 115 116 typ := icmpv4EchoRequest 117 if net == "ip6" { 118 typ = icmpv6EchoRequest 119 } 120 xid, xseq := os.Getpid()&0xffff, i+1 121 wb, err := (&icmpMessage{ 122 Type: typ, Code: 0, 123 Body: &icmpEcho{ 124 ID: xid, Seq: xseq, 125 Data: bytes.Repeat([]byte("Go Go Gadget Ping!!!"), 3), 126 }, 127 }).Marshal() 128 if err != nil { 129 t.Fatalf("icmpMessage.Marshal failed: %v", err) 130 } 131 if _, err := c.Write(wb); err != nil { 132 t.Fatalf("Conn.Write failed: %v", err) 133 }我无法理解此代码中的以下内容:Marshal()未包含在net 包文档中,请让我知道如何找到此函数以及为什么它未包含在 net 包中。请解释我的第 121 行(icmpMessage结构和函数调用,因为这些未在此文件中定义)。
1 回答
- 1 回答
- 0 关注
- 160 浏览
添加回答
举报
0/150
提交
取消