本文章介绍下通过nc工具、iperf工具和python脚本,实现发送tcp/udp请求
一、nc工具(netcat工具)
这个工具linux系统默认是自带的,以下是命令的常用参数
1.1 发送tcp请求
在服务端监听端口nc -l port
客户端连接并发送请求nc -v host port
在服务端收到了信息
当服务端端口未监听时,连接会报错
上面的监听方式,当从客户端或服务端退出连接时,另一端也会自动退出
如果想服务端一直监听,则需要加上-k参数
如果想将服务置于后端运行,则可通过setisid,&,nohup命令,如setsid nc -lk 8888
1.2发送udp请求
在服务端监听端口nc -ul port
客户端连接并发送请求nc -uv host port
服务端收到消息
tpc是面向连接的,而udp是无连接的。所以当服务器端端口未监听时,连接也不会报错
二、iperf工具
iperf是一个网络性能测试工具,可以测试tcp/udp带宽质量等
首先要安装iperf
brew install iperf
或者
yum install iperf
常用参数:iperf --help可查看详细参数
-c/s:客户端模式/服务端模式
-p:指定iperf测试端口
-i:指定报告间隔
-u:使用udp方式
-b:设置UDP的发送带宽,单位bit/s
-t:设置测试的时长,单位为秒,不设置默认10s
-l:指定包大小,TCP默认8k,UDP默认1470字节
2.1 tcp通信
iperf -s -i 1 -p 12306
iperf -c 43.138.0.250 -p 12306 -i 1
2.2 udp通信
iperf -u -s -i 1 -p 12306
iperf -u -c 43.138.0.250 -p 12306 -i 1
三、python脚本
使用python2运行
3.1 tcp服务端脚本
# -*- coding: utf-8 -*-
# 一个简单的tcp服务器
import sys
from SocketServer import BaseRequestHandler, ThreadingTCPServer
from datetime import datetime
reload(sys)
sys.setdefaultencoding('utf8')
class EchoHandler(BaseRequestHandler):
def handle(self):
print('%s : Got connection from %s' % (datetime.now(), self.client_address))
while True:
try:
msg = self.request.recv(8192)
print('msg:%s' % msg)
if not msg:
break
self.request.send('receive: ' + msg)
except Exception as e:
pass
if __name__ == '__main__':
serv = ThreadingTCPServer(('', 8888), EchoHandler) # 8888为要监听的端口
serv.serve_forever()
3.2 udp服务端脚本
# -*- coding: utf-8 -*-
# 一个简单的udp服务器
from socket import *
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind(('', 12307)) # 12307为要监听的端口号
while True:
msg, address = serverSocket.recvfrom(1024)
print(msg)
message = 'receive: ' + msg
serverSocket.sendto(message, address)
3.3 客户端脚本
# -*- coding: utf-8 -*-
# 客户端脚本
import socket
import time
import datetime
out_data = "test test test test" # 客户端发送内容
count = 10 # 发送数据次数
def loop_func(l4_type, l4_host, l4_port, second):
socket_type = {"tcp": socket.SOCK_STREAM, "udp": socket.SOCK_DGRAM}
s = socket.socket(socket.AF_INET, socket_type.get(l4_type))
s.connect((l4_host, l4_port))
loop = 0
while True:
cur_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
print(cur_time)
print('send: ' + out_data)
s.send(out_data.encode())
in_data = s.recv(1024)
if len(in_data) == 0:
s.close()
print('server closed connection.')
print(in_data)
time.sleep(second)
loop += 1
if loop == count:
print("time out, over")
break
if __name__ == "__main__":
host = 'localhost' # host
port = 12307 # port
#loop_func("tcp", host, port, 1) # tcp
loop_func("udp", host, port, 1) # udp每1秒发一次数据
服务端输出结果:
客户端输出结果: