怎么说呢
这也不是一个完整的Ping过程处理,
更像是一个可以测试Ping服务器的工具。
支持并发,编译完后,可以用ping.exe -help 查看使用说明
上代码吧,
/** * 邪恶的Ping命令, * 只发数据报,不接收,而且可以伪造别人的IP */ package main import ( "bytes" "flag" "fmt" "net" "time" "runtime" ) var ( datalen int = 100 timeout int = 10 targethost string = "www.XXXXX.com" localIp string = "102.23.24.5.135" times int = 10 concurrent int = 10 //10个并发 ) func doPing(laddr *net.IPAddr, raddr *net.IPAddr, b *[]byte) { defer func() { tmp <- true }() conn, err := net.DialIP("ip4:icmp", laddr, raddr) if err != nil { fmt.Println(err.Error()) return } conn.SetDeadline(time.Now().Add(time.Duration(timeout) * time.Second)) _, err = conn.Write(*b) if err != nil { fmt.Println(err.Error()) } defer conn.Close() } var tmp chan bool func main() { flag.StringVar(&targethost, "target", "www.baidu.com", "目标地址") flag.StringVar(&localIp, "local", "102.23.24.5.135", "发送源地址") flag.IntVar(&timeout, "timeout", 10, "超时设置,单位秒") flag.IntVar(&datalen, "datalen", 1024, "携带数据包大小") flag.IntVar(×, "times", 1, "Ping次数") flag.IntVar(&concurrent, "concurrent", 1, "并发数,不能小于Ping次数") flag.Parse() fmt.Printf("Ping %s\n发送方IP:%s\n,数据长度:%d\n超时:%d秒\n发送次数:%d\n并发数:%d\n", targethost, localIp, datalen, timeout, times, concurrent) tmp = make(chan bool, concurrent) runtime.GOMAXPROCS(runtime.NumCPU()) var ( laddr = net.IPAddr{IP: net.ParseIP(localIp)} raddr, _ = net.ResolveIPAddr("ip", targethost) ) //直接构造ICMP包,带数据的 b := []byte{8, 0, 0, 0} b = append(b, bytes.Repeat([]byte("a"), datalen)...) csumcv := len(b) - 1 // checksum coverage s := uint32(0) for i := 0; i < csumcv; i += 2 { s += uint32(b[i+1])<<8 | uint32(b[i]) } if csumcv&1 == 0 { s += uint32(b[csumcv]) } s = s>>16 + s&0xffff s = s + s>>16 b[2] ^= byte(^s & 0xff) b[3] ^= byte(^s >> 8) start := time.Now() //使用并发 for i := 0; i < concurrent; i++ { go doPing(&laddr, raddr, &b) } for i := 0; i < times; i++ { <-tmp if i < times-concurrent { go doPing(&laddr, raddr, &b) } fmt.Print(".") } sub := time.Now().Sub(start) / 1e6 fmt.Println() fmt.Printf("全部请求发送完成,耗时:%d毫秒", sub) }
相关推荐
开源项目-digineo-go-ping.zip 是一个在/r/golang社区展示的简单ping库,由Go语言编写。这个库提供了方便的API,允许开发者在Go应用程序中轻松地实现网络探测功能,即发送ICMP回显请求(通常称为ping)到其他主机,...
`ping`函数接收一个IP地址,调用`RunCMD`函数执行ping命令。在`main`函数中,首先设置`GOMAXPROCS`为当前CPU的核心数,这样可以充分利用多核处理器的性能。然后,打开文件`pinglist.txt`,逐行读取IP地址并存入切片`...
【标题】"pinggo:ping Go版本"是一个基于Go语言实现的网络诊断工具,它提供了类似于标准`ping`命令的功能,用于检查网络连通性。这个项目有两个版本,可能分别代表了不同阶段的开发或者实现了不同的功能特性。通过...
ICMP协议是TCP/IP协议族的一部分,主要用于网络诊断和错误报告,例如,它用于ping命令,用来检查网络连接的可达性。在安全领域,ICMP协议由于其简单性和无状态性,常常被滥用为攻击工具。 标签中的“go _go _go!”...
下面是Ubuntu下安装Ping工具的命令: sudo apt-get update && apt-get install iputils-ping 补充知识:standard_init_linux.go:211: exec user process caused “no such file or direct 问题 总结了网上一些问题...
Cisco命令是网络管理员在配置和管理Cisco路由器、交换机及其他网络设备时所使用的命令行界面(CLI)命令。这些命令覆盖了网络设备的各种操作,包括配置、监控、故障排查和优化。以下是一些主要的Cisco命令及其用途: ...
在本文中,我们将深入探讨如何使用Golang(Go语言)和PostgreSQL数据库来构建一个完整的GraphQL服务。GraphQL是一种强大的查询语言,用于API,它允许客户端定义所需数据的结构,从而提供更灵活的数据获取方式。而Go...
Go语言,也称为Golang,是由Google开发的一种静态类型的、编译式的、垃圾回收的、并发型且具有C/C++风格语法的编程语言。它在近年来因其高效的性能、简洁的语法以及内置的并发支持而备受开发者青睐。"Go-简单实用...
Uboot 命令详解 Uboot 是一个开源的 Bootloader,广泛应用于嵌入式系统中。下面是 Uboot 中常用的...这些命令都是 Uboot 中常用的命令,了解这些命令可以帮助开发者更好地使用 Uboot,实现嵌入式系统的开发和调试。
这里我们创建了一个新的Redis客户端,并通过`Ping()`命令检查连接是否正常。 接下来,我们聊聊Goroutines和Channels,它们是Golang并发编程的核心。Goroutine是一种轻量级的线程,可以并发地执行任务。而Channel则...
ping命令是网络管理员最常用的工具之一,用于检查网络连接和设备的可达性。在Go语言中,我们可以使用`net`包中的`ICMP`功能来实现带ICMP的ping操作。这个服务在第一次连接时,会返回所有在线设备的列表,这通常是...
Go语言,又称为Golang,是Google推出的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。它以其简洁的语法、高效的性能以及内置的并发支持,受到了广大开发者的喜爱。在Web开发领域,Gin框架作为Go语言的...
◆ 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup; ◆ 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who; ◆ 其它...
`ping` 命令用于测试与另一台计算机的网络连通性。 - **基本用法**: - `ping [ip_address]`:向指定 IP 地址发送 ICMP 请求包。 - `ping -c [count] [ip_address]`:发送指定次数的 ICMP 请求包。 - `ping -i ...
视窗使用duck.exe 在管理员命令提示符下运行duck屏幕截图目标更好地替代终端ping命令在后台捕获高延迟事件,并在审核时使其清晰可见特征终端内ASCII延迟图表终端中延迟的着色(仅适用于Mac和Linux) 每30秒打印一次...
在本文中,我们将深入探讨如何使用Go语言的Gin框架构建一个Web项目骨架。Gin是一个用Go编写的轻量级、高效率的HTTP web框架,它提供了丰富的中间件支持和简洁的API设计,使得开发Web应用变得快速而高效。 **一、Gin...
通过上述示例代码,我们可以看到如何利用Go语言的强大功能来轻松实现网络状态检查。这不仅有助于开发者快速定位网络问题,同时也为构建更稳定可靠的网络应用提供了基础。希望本文能够帮助到正在学习或使用Golang的...
除了上述命令外,U-Boot还允许用户设置和修改环境变量,以实现更加灵活的定制化配置。以下是一些常用的环境变量及其用途: - **`ipaddr`**: 设置U-Boot的IP地址。 - **`serverip`**: 设置TFTP服务器的IP地址。 - **...
此外,文档还简要介绍了ARP协议和TFTP协议,这两个协议分别在ping命令和TFTP命令的实现中起到了关键作用。 文档的附录部分还包含了U-Boot的lds文件详解、ARMGCC内嵌汇编手册、typedef用法小结、U-Boot中typedef应用...