当前位置:   article > 正文

linux发送tcp/udp请求_linux发送udp包命令

linux发送udp包命令

本文章介绍下通过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

  1. brew install iperf
  2. 或者
  3. yum install iperf

常用参数:iperf --help可查看详细参数

  1. -c/s:客户端模式/服务端模式
  2. -p:指定iperf测试端口
  3. -i:指定报告间隔
  4. -u:使用udp方式
  5. -b:设置UDP的发送带宽,单位bit/s
  6. -t:设置测试的时长,单位为秒,不设置默认10s
  7. -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服务端脚本
  1. # -*- coding: utf-8 -*-
  2. # 一个简单的tcp服务器
  3. import sys
  4. from SocketServer import BaseRequestHandler, ThreadingTCPServer
  5. from datetime import datetime
  6. reload(sys)
  7. sys.setdefaultencoding('utf8')
  8. class EchoHandler(BaseRequestHandler):
  9. def handle(self):
  10. print('%s : Got connection from %s' % (datetime.now(), self.client_address))
  11. while True:
  12. try:
  13. msg = self.request.recv(8192)
  14. print('msg:%s' % msg)
  15. if not msg:
  16. break
  17. self.request.send('receive: ' + msg)
  18. except Exception as e:
  19. pass
  20. if __name__ == '__main__':
  21. serv = ThreadingTCPServer(('', 8888), EchoHandler) # 8888为要监听的端口
  22. serv.serve_forever()
3.2 udp服务端脚本
  1. # -*- coding: utf-8 -*-
  2. # 一个简单的udp服务器
  3. from socket import *
  4. serverSocket = socket(AF_INET, SOCK_DGRAM)
  5. serverSocket.bind(('', 12307)) # 12307为要监听的端口号
  6. while True:
  7. msg, address = serverSocket.recvfrom(1024)
  8. print(msg)
  9. message = 'receive: ' + msg
  10. serverSocket.sendto(message, address)
3.3 客户端脚本
  1. # -*- coding: utf-8 -*-
  2. # 客户端脚本
  3. import socket
  4. import time
  5. import datetime
  6. out_data = "test test test test" # 客户端发送内容
  7. count = 10 # 发送数据次数
  8. def loop_func(l4_type, l4_host, l4_port, second):
  9. socket_type = {"tcp": socket.SOCK_STREAM, "udp": socket.SOCK_DGRAM}
  10. s = socket.socket(socket.AF_INET, socket_type.get(l4_type))
  11. s.connect((l4_host, l4_port))
  12. loop = 0
  13. while True:
  14. cur_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  15. print(cur_time)
  16. print('send: ' + out_data)
  17. s.send(out_data.encode())
  18. in_data = s.recv(1024)
  19. if len(in_data) == 0:
  20. s.close()
  21. print('server closed connection.')
  22. print(in_data)
  23. time.sleep(second)
  24. loop += 1
  25. if loop == count:
  26. print("time out, over")
  27. break
  28. if __name__ == "__main__":
  29. host = 'localhost' # host
  30. port = 12307 # port
  31. #loop_func("tcp", host, port, 1) # tcp
  32. loop_func("udp", host, port, 1) # udp每1秒发一次数据

服务端输出结果:

客户端输出结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/541357
推荐阅读
相关标签
  

闽ICP备14008679号