【Python】Python端口占用测试(检测Socket)

本文介绍了Windows系统中动态端口的查询与设置方法,包括使用netsh命令查看和修改TCP动态端口范围。同时,通过Python实现了一个简单的端口测试接口,包括客户端和服务端代码,方便进行端口可用性检查。适合初学者了解Socket编程。

windows 端口相关

本文内容相对简单,开头部分是对Windows端口状态的一些描述

动态端口查询

netsh int ipv4 show dynamicport tcp

协议 tcp 动态端口范围
---------------------------------
启动端口        : 49152
端口数          : 16384

动态端口设置

需要再管理员命令行下:

netsh int ipv4 set dynamicport tcp start=49152 num=2000

Python实现的端口测试接口

Python 实现一个客户端和服务端的代码相对简单,易于操作。相比于 C/C++ 这样的语言来说,更适合新手去理解 Socket 编程。

客户端代码是在最初只新建一个简单客户端的基础上完善过来的,因为涉及到端口的代码占用测试,在使用过程中,读者可以根据自己的需求去实现对应环境的socket程序。

推荐学习网站: Python 网络编程 | 菜鸟教程

客户端

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py
 
from ast import Try
import socket               # 导入 socket 模块
import sys

socketList = []

host = socket.gethostname() # 获取本地主机名
remoteHost = '192.168.3.171'
remotePort = 6000                # 设置端口号

errNum = 0
ToTalNum = 0
errPorts = {}

print("请通过\'netsh int ipv4 show dynamicport tcp\'查看启动端口和端口数,一般情况下该值为49152")
start = eval(input("启动端口:"))
end = eval(input("终止端口:"))

for i in range(start , end): 
    ToTalNum += 1
    s = socket.socket()         # 创建 socket 对象
    localHostAndPort = (host,i)
    try:
        s.bind(localHostAndPort)
        if s.connect((remoteHost, remotePort)) == socket.error:
            print('FAILED', i)
        print(s.recv(1024).decode(), i)
        socketList.append(s)
    except OSError as e:
        errNum += 1
        errPorts[i] = (localHostAndPort, "OSError:", e)

print("Total Port Number(%r)"%ToTalNum, "Error Port Number(%r)"%errNum)
print("Error Ports:")
for err in errPorts.keys():
    print(err, errPorts[err])

if len(errPorts) == 0:
    print("All Ports success (%d) ~"%start, "(%d)"% end)

print("输入\'exit\'关闭CLIENT:")
char = input()
while char != "exit":
	# print(char)
	char = input()

for skt in socketList:
    skt.close()
# print(socketList)

服务端

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py
 
import socket               # 导入 socket 模块
 
s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口

msg = 'Success!'  #strip默认取出字符串的头尾空格
 
s.listen(5)                 # 等待客户端连接
while True:
    c,addr = s.accept()     # 建立客户端连接
    print('连接地址:', addr)
    c.send(msg.encode('utf-8'))
    c.close()                # 关闭连接
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧恩意

如有帮助,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值