基于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,端口,扫描
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
PyCharm搭建一劳永逸的开发环境
2022-12-23 20:24:23
![](https://img.aspxhome.com/file/2023/7/107657_0s.jpg)
讲解SQL Server危险扩展存储删除和恢复
2008-12-09 14:30:00
详解如何利用Python进行客户分群分析
2023-04-25 16:47:09
![](https://img.aspxhome.com/file/2023/9/66839_0s.jpg)
python 中的pycrypto 算法加密
2022-01-07 11:23:33
python中删除某个元素的方法解析
2021-02-02 00:05:40
PHP微信开发之有道翻译
2023-11-22 01:08:19
解析python 中/ 和 % 和 //(地板除)
2021-04-19 02:05:14
ubuntu16.04制作vim和python3的开发环境
2022-08-11 00:11:07
Mysql入门系列:MYSQL日志文件维护
2008-11-24 13:10:00
![](https://img.aspxhome.com/file/UploadPic/200811/20081129183218725.jpg)
Python 列表list使用介绍
2021-01-03 09:37:16
XML卷之实战锦囊(1):动态排序
2008-09-05 17:20:00
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2021-03-05 13:42:45
![](https://img.aspxhome.com/file/2023/4/78514_0s.jpg)
粗暴解决CUDA out of memory的问题
2023-05-12 05:40:00
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2021-03-12 03:38:27
![](https://img.aspxhome.com/file/2023/5/70735_0s.png)
菜鸟课堂:MySQL权限的详细解答
2009-09-03 11:43:00
解决tensorflow测试模型时NotFoundError错误的问题
2021-08-02 09:33:56
去除新云CMS文章列表前的小圆点
2008-09-27 13:36:00
![](https://img.aspxhome.com/file/UploadPic/20089/27/2008927133830362s.jpg)
pandas数据类型之Series的具体使用
2022-03-30 18:54:46
T-SQL问题解决集锦 数据加解密全集
2012-07-11 15:34:08
Python 实现大整数乘法算法的示例代码
2022-07-07 02:57:54