python编写TCP和UDP测试工具

这篇具有很好参考价值的文章主要介绍了python编写TCP和UDP测试工具。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

工具介绍

通过python编写的TCP&UDP协议的客户端和服务端,支持IPV4和IPV6的网络环境,同时新增加客户端ip和端口绑定功能。

client客户端

# coding=utf-8
"""
@项目:djangoProject
@文件:TCP_client
@环境:PyCharm
@作者:Du
@时间:2022/12/6-16:16
"""
import socket
import time

class tuClient:
    host1 = ''
    port1 = ''
    host = ''
    port = ''
    mode = ''
    def __init__(self,mode):
        self.m = mode

    def tcpC4(self, host, port, host1, port1):
        tcpT4Client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        tcpT4Client.setsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR, 1 )
        tcpT4Client.bind((host1, int(port1)))
        tcpT4Client.connect((host, int(port)))
        print("... TCP IPv4 连接成功...")
        while True:  # 判断是否退出
            send_data = input("请输入要发送的内容:")
            tcpT4Client.send(send_data.encode())  # 发送TCP数据
            if send_data == "byebye":
                break
            info = tcpT4Client.recv(1024).decode()
            if info == "byebye":
                break
            else:
                print("通过TCP-IPV4,收到服务端",host,port,"的消息:", info)
        tcpT4Client.close()

    def udpC4(self, host, port, host1, port1):
        udpT4Client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        udpT4Client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        udpT4Client.bind((host1, int(port1)))
        print("...UDP IPv4 连接成功...")
        while True:
            time.sleep(1)
            udpT4Client.sendto("hello".encode(), (host, int(port)))
            print("将 hello 发送到", host,port)

    def tcpC6(self, host, port, host1, port1):
        tcpT6Client = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
        tcpT6Client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        tcpT6Client.bind((host1, int(port1)))
        tcpT6Client.connect((host, int(port)))
        print("... TCP IPv6 连接成功...")
        while True:  # 判断是否退出
            send_data = input("请输入要发送的内容:")
            tcpT6Client.send(send_data.encode())  # 发送TCP数据
            if send_data == "byebye":
                break
            info = tcpT6Client.recv(1024).decode()
            if info == "byebye":
                break
            else:
                print("通过TCP-IPV6,收到服务端",host,port,"的消息:", info)
        tcpT6Client.close()

    def udpC6(self, host, port, host1, port1):
        udpU6Client = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
        udpU6Client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        udpU6Client.bind((host1, int(port1)))
        print("...UDP IPv6 连接成功...")
        while True:
            time.sleep(1)
            udpU6Client.sendto("hello".encode(), (host, int(port)))
            print("将 hello 发送到", host,port)


if __name__ == "__main__":
    host1 = input("请输入本机客户端ip地址:")
    port1 = input("请输入本机客户端端口号:")
    host = input("请输入服务端ip地址:")
    port = input("请输入服务端端口号:")
    mode = input("请输入类型(t4/t6/u4/u6):")
    x = tuClient(mode)
    if x.m == 't4':
        x.tcpC4(host, port, host1, port1)
    elif x.m == 't6':
        x.tcpC6(host, port, host1, port1)
    elif x.m == 'u4':
        x.udpC4(host, port, host1, port1)
    else:
        x.udpC6(host, port, host1, port1)

server服务端

# coding=utf-8
"""
@项目:djangoProject
@文件:TCP_server
@环境:PyCharm
@作者:Du
@时间:2022/12/6-16:17
"""
import socket

class tuServer():
    host = ''
    port = ''
    mode = ''
    def __init__(self,mode):
        self.m = mode

    def serverT4(self, host, port):
        tcpT4Server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        tcpT4Server.bind((host, int(port)))
        print("***TCP IPV4 服务创建成功,等待客户端连接***")
        tcpT4Server.listen(5)
        clientSock, clientaddr = tcpT4Server.accept()  # 被动接收TCP客户端连接
        print("***客户端已经连接***")
        while True:  # 判断是否退出
            info = clientSock.recv(1024).decode()  # 接收客户端数据
            if info == "byebye":
                break
            print("通过TCP-IPV4,收到客户端:", clientSock.getpeername(),"的消息:", info)
            send_data = input("请输入要发送的内容:")
            clientSock.send(send_data.encode())  # 发送TCP数据
            if send_data == "byebye":
                break
        clientSock.close()
        tcpT4Server.close()

    def udpT4(self, host, port):
        udpT4Server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        udpT4Server.bind((host, int(port)))
        print("***UDP-IPv4服务启动***")
        while True:
            udpT4Data, udpT4ServerInfo = udpT4Server.recvfrom(1024)
            print("收到来自:", udpT4ServerInfo, "的消息:", udpT4Data.decode())

    def serverT6(self, host, port):
        tcpT6Server = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
        tcpT6Server.bind((host, int(port)))
        print("***TCP IPV6 服务创建成功,等待客户端连接***")
        tcpT6Server.listen(5)
        clientSock, clientaddr = tcpT6Server.accept()  # 被动接收TCP客户端连接
        print("***客户端已经连接***")
        while True:  # 判断是否退出
            info = clientSock.recv(1024).decode()  # 接收客户端数据
            if info == "byebye":
                break
            print("通过TCP-IPV6,收到客户端:", clientSock.getpeername(),"的消息:", info)
            send_data = input("请输入要发送的内容:")
            clientSock.send(send_data.encode())  # 发送TCP数据
            if send_data == "byebye":
                break
        clientSock.close()
        tcpT6Server.close()

    def udpT6(self, host, port):
        udpT6Server = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
        udpT6Server.bind((host, int(port)))
        print("***UDP-IPv6服务启动***")
        while True:
            udpT4Data, udpT6ServerInfo = udpT6Server.recvfrom(1024)
            print("收到来自:", udpT6ServerInfo[:2], "的消息:", udpT4Data.decode())

if __name__ == "__main__":
    host = input("请输入本机监听服务使用ip地址:")
    port = input("请输入监听服务使用端口号:")
    mode = input("请输入类型(t4/t6/u4/u6):")
    x = tuServer(mode)
    if x.m == 't4':
        x.serverT4(host, port)
    elif x.m == 't6':
        x.serverT6(host, port)
    elif x.m == 'u4':
        x.udpT4(host, port)
    else:
        x.udpT6(host, port)

python3.x和python2.x代码逻辑一致,只是部分函数写法不一样,只需要修改写法后同样可以在python2.x环境使用

1、python3.x的print()函数有括号,python2.x对应的print函数没有括号

2、python3.x的输入函数使用input(),而在python2.x对应raw_input()函数

3、python3.x和python2.x的编解码差异

4、python2.x的源码.py文件的默认编码方式为ASCII, python3.x的源码.py文件的默认编码方式为UTF-8。因此,如果要在python2.x的.py文件里面写中文,则必须要添加一行声明文件编码的注释(# coding=utf-8),否则python2.x会默认使用ASCII编码

程序运行方式

程序执行命令:python *.py         #需在程序对应路径下执行,python环境变量自行配置

python编写TCP和UDP测试工具

 文章来源地址https://www.toymoban.com/news/detail-435877.html

使用指导

服务端

运行后按照提示输入对应信息

  1. 本机监听服务使用IP:指定IP地址则只在指定IP上启用服务,不指定则输入0.0.0.0,会在所有IP地址起监听服务
  2. 监听服务端口号:指定一个服务端口起监听服务
  3. 请输入类型(t4/t6/u4/u6):t4表示ipv4的TCP服务,t6表示ipv6的TCP服务,u4表示ipv4的UDP服务,u6表示ipv6的UDP服务

python编写TCP和UDP测试工具

 

客户端

运行后按照提示输入对应信息

  1. 请输入本机客户端IP地址:指定使用本机的一个IP地址做客户端IP
  2. 请输入本机客户端端口号:指定使用一个端口做客户端端口
  3. 请输入服务端IP地址:需要连接的服务端IP地址
  4. 请输入服务端端口号:需要连接的服务端端口号
  5. 请输入类型(t4/t6/u4/u6):t4表示ipv4的TCP服务,t6表示ipv6的TCP服务,u4表示ipv4的UDP服务,u6表示ipv6的UDP服务

注:连接服务端成功需要服务端对应IP和端口启用监听服务

python编写TCP和UDP测试工具

 

运行结果

连接效果如下所示:

python编写TCP和UDP测试工具

 验证客户端一对多如下

服务端:

同时在10.111.14.155和10.111.14.154服务器上启动server服务端程序,监听50009端口

客户端:

同时在10.111.14.205上启用2个客户端,客户端端口均为50009与10.111.14.155和10.111.14.154服务器上的server服务端程序的50009端口建立连接。在10.111.14.205服务器新开一个窗口查看50009端口监听。

python编写TCP和UDP测试工具

 

 

 

 

到了这里,关于python编写TCP和UDP测试工具的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用Python编写一个代理池测试工具

    部分数据来源: ChatGPT 背景:         在进行网络爬虫时,我们经常需要使用代理池来防止IP被网站禁封。代理池是一个保存多个代理IP地址的数据库,我们可以从数据库中随机选择一个代理地址来进行网络请求,避免过多请求来自同一个IP地址。 为了提高爬虫程序的稳定

    2024年02月08日
    浏览(41)
  • Python+Requests+PyWebIO框架详解,编写测试工具提高团队测试效率

    老铁们如果是QA,想必也遇到过类似痛点吧: 业务逻辑复杂性决定测试场景复杂性,配置测试场景常常花费大量时间,导致测试效率降低 新用户的测试场景,账号可能经常注销,协助debug时需要用userid,每次都得重新抓包。而且测试账号很多,来回切,即使在本地管理userid,

    2024年02月13日
    浏览(42)
  • web应用模式、API接口、接口测试工具postman、如何在浏览器中测试、restful规范、序列化反序列化、基于Django原生编写五个接口、drf介绍和快速使用、drf之APIView源码分析

    目录 一、web应用模式 二、API接口 三、接口测试工具postman postman介绍 postman下载与使用 四、如何在浏览器中测试 五、restful规范(重要) 六、序列化反序列化 七、基于Django原生编写五个接口 八、drf介绍和快速使用 概念 特点(了解一下) 安装 使用drf编写五个接口 九、drf之API

    2024年02月05日
    浏览(59)
  • 【Apifox】测试工具自动编写接口文档

    在开发过程中,我们总是避免不了进行接口的测试, 而相比手动敲测试代码,使用测试工具进行测试更为便捷,高效 今天发现了一个非常好用的接口测试工具Apifox 相比于Postman,他还拥有一个非常nb的功能, 在接口的测试完成后,它可以一键生成接口文档 下载地址(免费哟

    2023年04月09日
    浏览(45)
  • 性能测试工具 Jmeter 做 Http 接口测试 :编写自定义函数

    目录 一、 前言 二、 编写自定义函数的步骤 1. 新建一个工程,导入 jmeter jar 包。 2. 新建 package:stressTest.functions 3. 新建一个类继承 AbstractFunction,重写以下方法: 4. 打包 5. 将打出来的 jar 包拷贝至 jmeter 的目录: 6. 运行

    2024年02月15日
    浏览(49)
  • 软件测试学习(四)自动测试和测试工具、缺陷轰炸、外包测试、计划测试工作、编写和跟踪测试用例

    目录 自动测试和测试工具 工具和自动化的好处 测试工具 查看器和监视器 驱动程序 桩 压力和负载工具 干扰注入器和噪声发生器 分析工具 软件测试自动化 宏录制和回放 可编程的宏 完全可编程的自动测试工具 随机测试:猴子和大猩猩 使用测试工具和自动化的实质 缺陷轰炸

    2024年02月08日
    浏览(55)
  • 有了这几个软件安全测试工具,编写安全测试报告再也不愁

    软件的安全是开发人员、测试人员、企业以及用户共同关心的话题,尤其是软件产品的使用者,因为系统中承载着用户的个人信息、人际互动、管理权限等各类隐私海量关键数据。软件安全测试工作不仅是为了用户,更牵扯到许多的利益共同体。因此软件安全测试必不可少,

    2024年02月03日
    浏览(45)
  • TCP Socket Client 测试工具,并发测试

    TCP协议 Socket客户端测试程序 发送数据支持ASCII与16进制格式 可以模拟并发压力测试 创建终端,然后发送数据   工具下载  

    2024年02月12日
    浏览(41)
  • 基于TCP协议的游戏代理接口测试工具<一>:设计初衷与工具构想

    大势所逼 众所周知,区别于HTTP之类的协议,由于tcp协议包体通信的高度定制化导致业内基本没有通用的接口工具用于游测人员进行日常使用,大部分的情况是基于这种状态下只能进行测试工具定制。在日益兴盛的游戏行业中,对于游测的各种测试维度的要求也在逐步增长,

    2024年02月03日
    浏览(49)
  • 压力测试与测试工具jmeter的介绍

    目录 一、性能指标 二、jmeter (一)JMeter 安装 (二)JMeter 压测示例 1、添加线程组 2、添加 HTTP 请求  3、添加监听器 4、启动压测查看分析结果 (三)JMeter Address Already in use 错误解决   压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测

    2024年02月14日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包