本文章介绍下通过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秒发一次数据

服务端输出结果:

客户端输出结果:

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: