go简易tcp/udp连接测试工具
package main import (
"fmt"
"io"
"log"
"net"
"os"
) func showBytes(bytes []byte) string {
var str []byte
for _, b := range bytes {
if b >= 33 && b <= 126 && b != 92 {
str = append(str, b)
} else {
str = append(str, fmt.Sprintf("\\%02X", b)...)
}
}
return string(str)
} func writeAllTCP(con *net.TCPConn, message []byte) error {
defer con.CloseWrite()
for len(message) > 0 {
l, err := con.Write(message)
if err != nil {
return err
}
message = message[l:]
}
return nil
} func handleTCP(client *net.TCPConn, message []byte) {
defer client.Close()
addrStr := client.RemoteAddr().String()
log.Printf("Client %s connected\n", addrStr)
var data [1024]byte
n, err := io.ReadFull(client, data[:])
if err != nil && err != io.ErrUnexpectedEOF {
log.Printf("Failed to read: %v\n", err)
return
}
log.Printf("From %s: %s\n", addrStr, showBytes(data[:n]))
if err := writeAllTCP(client, message); err != nil {
log.Printf("Failed to write: %v\n", err)
return
}
} func main() {
if len(os.Args) != 5 || os.Args[1] != "tcp" && os.Args[1] != "udp" || os.Args[2] != "server" && os.Args[2] != "client" {
fmt.Fprintf(os.Stderr, "Usage: %s tcp|udp server|client <server address> <message>\n", os.Args[0])
os.Exit(1)
}
if os.Args[1] == "tcp" {
addr, err := net.ResolveTCPAddr("tcp", os.Args[3])
if err != nil {
panic(err)
}
if os.Args[2] == "server" {
con, err := net.ListenTCP("tcp", addr)
if err != nil {
panic(err)
}
defer con.Close()
for {
client, err := con.AcceptTCP()
if err != nil {
log.Printf("Failed to accept: %v\n", err)
continue
}
go handleTCP(client, []byte(os.Args[4]))
}
} else {
con, err := net.DialTCP("tcp", nil, addr)
if err != nil {
panic(err)
}
defer con.Close()
if err := writeAllTCP(con, []byte(os.Args[4])); err != nil {
panic(err)
}
var data [1024]byte
n, err := io.ReadFull(con, data[:])
if err != nil && err != io.ErrUnexpectedEOF {
panic(err)
}
fmt.Println(showBytes(data[:n]))
}
} else {
addr, err := net.ResolveUDPAddr("udp", os.Args[3])
if err != nil {
panic(err)
}
if os.Args[2] == "server" {
con, err := net.ListenUDP("udp", addr)
if err != nil {
panic(err)
}
defer con.Close()
for {
var data [1024]byte
n, addr, err := con.ReadFromUDP(data[:])
if err != nil {
log.Printf("Failed to read: %v\n", err)
continue
}
log.Printf("From %v: %s\n", addr, showBytes(data[:n]))
_, err = con.WriteTo([]byte(os.Args[4]), addr)
if err != nil {
log.Printf("Failed to write: %v\n", err)
continue
}
}
} else {
con, err := net.DialUDP("udp", nil, addr)
if err != nil {
panic(err)
}
defer con.Close()
_, err = con.Write([]byte(os.Args[4]))
if err != nil {
panic(err)
}
var data [1024]byte
n, _, err := con.ReadFromUDP(data[:])
if err != nil {
panic(err)
}
fmt.Println(showBytes(data[:n]))
}
}
}
https://gitee.com/thhh_sunny/go-net-hello?_from=gitee_search
https://gitee.com/YePitfall/socket-programming/tree/master/udpclient
go简易tcp/udp连接测试工具的更多相关文章
- [na][tools]tcp/udp连通性测试
一 端口连通性测试意义 目的端可以使用nc来临时开一个端口,客户端用telnet来连接测试 测试网络端口可达性,确保给某些使用特定端口的app做链路连通性检测.使它们能够正常的运行起来. 二 测试方法 ...
- TCP/UDP网络性能测试工具 - Netperf (zz) ..网络测试工具
在构建或管理一个网络系统时,我们更多的是关心网络的可用性,即网络是否连通,而对于其整体的性能往往考虑不多. 除了netperf以外. 还有很多其它的网络性能测试工具. 如db, ...
- [tools]tcp/udp连通性测试
一 端口连通性测试意义 测试网络端口可达性,确保给某些使用特定端口的app做链路连通性检测.使它们能够正常的运行起来. 二 法1 使用newclient发包,彼端tcpdump抓包观察是否能收到包 ...
- linux内核参数调优,缓冲区调整,tcp/udp连接管理,保持,释放优化,gossary,terms
changing a readonly file (linu single user mode)
- Python渗透测试工具合集
摘自:http://www.freebuf.com/tools/94777.html 如果你热爱漏洞研究.逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言.它包含大量实用的库和工具, ...
- python渗透测试工具集合
作者:一起学习Python 原文链接:https://zhuanlan.zhihu.com/p/21803985 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在进行漏洞研究. ...
- EMQ ---100万线连接测试说明
注解 EMQ 2.0 消息服务器默认设置,允许最大客户端连接是512,因为大部分操作系统 ‘ulimit -n’ 限制为1024. EMQ 消息服务器1.1.3版本,连接压力测试到130万线,8核心/ ...
- SIM7600CE TCP/IP连接与PPP拨号上网 4G上网
SIM7600CE联网测试分为两部分: 1.TCP/IP连接 2.PPP拨号上网 实验环境:ubuntu-meta 16.04 硬件:树莓派3B,SIM7600CE 上网卡:移动的NB-IOT物联网卡 ...
- tcp/udp高并发和高吐吞性能测试工具
在编写一个网络服务的时候都比较关心这个服务能达到多少并发连接,而在这连接的基础上又能达到一个怎样的交互能力.编写服务已经是一件很花力气的事情,而还要去编写一个能够体现结果的测试工具就更加消耗工作时间. ...
- TCP/UDP简易通信
TCP/UDP简易通信框架源码,支持轻松管理多个TCP服务端(客户端).UDP客户端 目录 说明 TCP/UDP通信主要结构 管理多个Socket的解决方案 框架中TCP部分的使用 框架中UDP部分的 ...
随机推荐
- SQL优化:distribute by 小数据场景处理数据倾斜
distribute by rand() distribute by :用来控制map输出结果的分发,即map端如何拆分数据给reduce端. 会根据distribute by 后边定义的列,根据re ...
- Jmeter添加BeanShell后置处理程序保存响应结果
对于某些请求,无法通过保存响应到文件这个组件来进行保存(会出现UNKNOW文件类型). 那么就可以通过BeanShell后置处理程序来进行将响应结果直接输出到文件,并可以直接指定文件名和后缀. imp ...
- 机器学习实战—搭建BP神经网络实现手写数字识别
看了几天的BP神经网络,总算是对它有一点点的理解了.今天就用python搭建了一个模型来实现手写数字的识别. 一.BP神经网络简介 BP(back propagation)神经网络是一种按照误差逆向传 ...
- Windows Powershell个性化设置
1. 设置Powershell prompt只显示当前目录: 2. 设置Powershell title为当前路径: 这个文件的路径为:echo $profile # file location:ec ...
- vue-固定头部-内容可滚动
<div class="show-box"> <div class="show-top"> ...
- 用bat文件,自动进入cmd虚拟环境
L:cd L:\myenv\Scriptscmd /K activate.bat 这行,这样写,cmd窗口会继续保留,按任意键也不会关闭. 这个问题网上大部分说法是在批处理里面加上 cmd /k, ...
- Rfost的自我介绍+软工五问
自我介绍+软工五问 问题 解答 这个作业属于哪个课程 网工1934-软件工程 这个作业要求在哪里 作业要求 这个作业的目标 让学生对软件工程有个初步的了解,同时掌握基础的markdown语法和博客园的 ...
- VMware虚拟机中Ubuntu18.04无法连接网络的有效解决办法
对VMware虚拟机进行恢复默认网络设置 恢复虚拟网络默认设置(在断网状态下): 1)Ubuntu网络设置自动获取IP 依次单击[System Settings]–>[Network]–> ...
- Java集合框架个人总结
Java集合框架个人总结 集合主要分为两大类:①单列集合Collection ②双列集合Map 集合存储的都是引用类型,不可是基础类型,如果保存基础类型需要用包装类. 1.Collection接口 ...
- UIPath踩坑记一UIpath中抓取数据后在tableau中无表头
UIpath抓取数据存在Excel中(Excel 应用程序范围),且已设置表头,但是放到tableau中无表头 更换为"写入范围(工作簿)",同时属性设置必须勾选"添加标 ...