闽公网安备 35020302035485号
兼容性:提供与标准 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 响应