基于Python编写一个简单的端口扫描器
作者:somenzz 时间:2021-09-19 09:21:22
端口扫描是非常实用的,不止用在信息安全方面,日常的运维也用得到。这方面的工具也不要太多,搞过 CTF 的朋友会告诉你有多少端口扫描工具,那为什么还要用 Python 再自己实现一遍?这个问题就像饭店里的菜已经很好吃了,为什么还要自己烧菜一样,主要还是为了适合自己的口味,添加自己需要的个性功能。
今天我们将用 20 行代码编写一个简单的端口扫描器。让我们开始吧!
1、需要的库
都是标准库,因此内网环境也不影响:
import socket
import argparse
import sys
import time
套接字库是一个低级网络接口库,它允许我们在脚本中创建网络连接。argparse 库用于解释传递给我们脚本的参数。sys 库允许我们与系统交互。最后,time 库用来统计耗时。
2、获取一个 host 地址
parser = argparse.ArgumentParser()
parser.add_argument('host')
args = parser.parse_args()
这样脚本在运行的时候,第一个参数就可以传入一个主机名或 ip 地址,下文就可以通过 args.host 来使用。
3、循环所有的端口
端口占用 2 个字节,因此其范围是 1-65535
start = time.time()
try:
for port in range(1, 65536):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
result = sock.connect_ex((args.host, port))
if result == 0:
print("Port: {} Open".format(port))
sock.close()
except KeyboardInterrupt:
sys.exit()
end = time.time()
如果 sock.connect_ex 返回了 0 说明端口开放,为了让程序正常退出,我们加上 try except 来捕获键盘发起的中断。
4、完整脚本
一旦 for 循环完成并扫描了所有端口,我们将获取时间并打印出脚本运行的时间:
import socket
import argparse
import sys
import time
parser = argparse.ArgumentParser()
parser.add_argument('host')
args = parser.parse_args()
start = time.time()
try:
for port in range(1, 65536):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
result = sock.connect_ex((args.host, port))
if result == 0:
print("Port: {} Open".format(port))
sock.close()
except KeyboardInterrupt:
sys.exit()
end = time.time()
print(f"Scanning completed in: {end-start:.3f}s")
除去空行,代码一共 20 行,运行效果如下:
来源:https://mp.weixin.qq.com/s/Drk6y3lUEegxII8XNd7sww
标签:Python,端口,扫描
0
投稿
猜你喜欢
jsp+ajax实现无刷新上传文件的方法
2024-04-17 10:39:30
使用phpMyAdmin修改MySQL数据库root用户密码的方法
2023-11-20 02:12:13
解决python执行较大excel文件openpyxl慢问题
2021-06-25 15:58:04
Python实现问题回答小游戏
2023-05-13 13:26:19
PHP扩展Swoole实现实时异步任务队列示例
2023-11-10 05:11:22
用python3读取python2的pickle数据方式
2023-06-05 09:45:48
PHP PDOStatement::errorInfo讲解
2023-06-04 14:11:53
C语言中操作sqlserver数据库案例教程
2024-01-24 17:47:32
python中实现k-means聚类算法详解
2021-07-18 21:42:49
Python实现监控程序执行时间并将其写入日志的方法
2023-01-15 01:35:53
基于SQL Server OS的任务调度机制详解
2024-01-14 22:17:59
pytorch教程resnet.py的实现文件源码分析
2023-11-07 21:18:47
Sql Server在安装时提示挂起的解决方法
2009-01-13 13:55:00
python实现定时压缩指定文件夹发送邮件
2022-06-02 19:32:36
前端框架之封装Vue第三方组件三个技巧
2023-07-02 16:37:03
Python堆排序原理与实现方法详解
2021-02-22 15:07:31
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2024-05-11 10:49:24
Python使用matplotlib绘制随机漫步图
2022-02-20 08:34:43
JavaScript自定义分页样式
2023-07-02 05:29:46
MySQL Cluster集群的初级部署教程
2024-01-22 01:50:16