python3 使用socket扫描主机端口是否开放
程序员文章站
2022-05-19 11:24:34
python3 使用socket扫描主机端口是否开放说明:测试环境:gevent模块的安装设置清华源 为默认的pip镜像安装gevent模块代码运行效果说明:使用socket和gevent模块实现 多协程扫描指定IP开放的端口测试环境:Windows10 x64 / Python3.7 / 局域网主机IPgevent模块的安装设置清华源 为默认的pip镜像pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/sim...
python3 使用socket扫描主机端口是否开放
说明:
使用socket和gevent模块实现 多协程扫描指定IP开放的端口
测试环境:
Windows10 x64 / Python3.7 / 局域网主机IP
设置清华源 为默认的pip镜像
pip3 版本需要先升级到10.0.1以上版本
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
设置设置清华源 为默认的pip镜像
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装gevent模块
pip3 install gevent
代码
# coding: utf-8
# 要扫描的主机
SCAN_IP = "192.168.10.1"
# socket超时时间设置
TIME_OUT = 0.1
# 开始扫描端口
START_PORT = 1
# 结束扫描端口
STOP_PORT = 500
# 一次并行扫描的端口数
SCAN_PORT_AT_ONCE = 50
# 扫描间隔时间
SLEEP_TIME = 1.7
import socket
import time
import gevent
from gevent import monkey
# 将程序中用到的耗时操作的代码,换为gevent中自己实现的模块
monkey.patch_all()
# 已开放的端口 列表
OPEN_LIST = list()
def scan(port):
"""使用socket扫描主机是否开放某个端口"""
# 创建socket
scan_socket = socket.socket()
# 设置超时时间
scan_socket.settimeout(TIME_OUT)
# s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常
if scan_socket.connect_ex((SCAN_IP, port)) == 0: # 当返回0时, 表示端口开放
# 记录开放的端口
OPEN_LIST.append(port)
print("{}:{} this port is open".format(SCAN_IP, port))
# 必须关闭这个套接字
scan_socket.close()
if __name__ == '__main__':
all_start_time = time.time()
# 1-65535 , 间隔50
for num in range(START_PORT, STOP_PORT, SCAN_PORT_AT_ONCE):
start_port = num
stop_port = num + SCAN_PORT_AT_ONCE - 1
# 最大端口限定, 不能超出
if stop_port > 65535:
stop_port = 65535
# 开始时间
start_time = time.time()
# 使用gevent模块实现多协程运行扫描
gevent.joinall([gevent.spawn(scan, port) for port in range(start_port, stop_port)])
# 一次扫描N个端口后休眠一下, 等待释放socket
time.sleep(SLEEP_TIME)
# 结束时间
end_time = time.time()
print("这一次扫描的时间为: {}".format(end_time - start_time))
print("这一次扫描的端口范围: [{} - {}]\n{}当前开放的端口有:{}".format(start_port, stop_port, SCAN_IP, OPEN_LIST))
all_end_time = time.time()
print("当前已运行时间为: [{}]".format(all_end_time - all_start_time))
print("-" * 50)
运行效果
本文地址:https://blog.csdn.net/u010684603/article/details/107438060
上一篇: 如何在微信朋友圈走红:你需要的不仅是内容
下一篇: 媒体是这么被营销人给免费玩转的