基于Python编写一个简单的端口扫描器
目录
1、需要的库2、获取一个 host 地址3、循环所有的端口4、完整脚本端口扫描是非常实用的,不止用在信息安全方面,日常的运维也用得到。这方面的工具也不要太多,搞过 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 行,运行效果如下:
到此这篇关于基于Python编写一个简单的端口扫描器的文章就介绍到这了,更多相关Python端口扫描器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?