兼容性:提供与标准 net.Conn 接口兼容的 API。
性能测试:在各种条件下测量网络延迟和数据包丢失。
专门用途:虽然 net.Conn 是通用网络连接接口,但 Mule 专门为基于 UDP 的诊断和 ICMP 响应处理而设计。
package main import ( "fmt" "log" "time" "github.com/k0s-io/mule" ) func main() { // 创建一个带有自定义选项的Mule连接 conn, err := mule.New( mule.WithLocalIP("192.168.1.100"), mule.WithTimeout(5*time.Second), mule.WithTTL(64), mule.WithTOS(0x10), // 设置DSCP为AF11 mule.WithIPv4Flag(mule.IPv4Flag(2)), // 设置DF(不分片)标志 ) if err != nil { log.Fatalf("创建Mule连接失败:%v", err) } defer conn.Close() // 定义目标服务器 targets := []struct { ip string port uint16 }{ {"10.0.0.1", 80}, {"10.0.0.2", 443}, {"10.0.0.3", 8080}, } // 堆代码 duidaima.com // 向所有目标发送UDP数据包 for _, target := range targets { payload := []byte("Mule测试数据包") _, err := conn.WriteToIP(payload, target.ip, 12345, target.port) if err != nil { log.Printf("向%s:%d发送数据包失败:%v", target.ip, target.port, err) continue } fmt.Printf("已发送数据包到%s:%d\n", target.ip, target.port) } // 接收并处理ICMP响应 for i := 0; i < len(targets); i++ { dstIP, srcPort, dstPort, err := conn.ReadFrom() if err != nil { log.Printf("读取ICMP响应时出错:%v", err) continue } fmt.Printf("收到ICMP响应:目标IP:%s,源端口:%d,目标端口:%d\n", dstIP, srcPort, dstPort) } }这个示例演示了:
3.接收和处理 ICMP 响应