用Python仅20行代码编写一个简单的端口扫描器


Posted in Python onApril 08, 2022

端口扫描是非常实用的,不止用在信息安全方面,日常的运维也用得到。这方面的工具也不要太多,搞过 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仅20行代码编写一个简单的端口扫描器

到此这篇关于基于Python编写一个简单的端口扫描器的文章就介绍到这了,更多相关Python端口扫描器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
让Python代码更快运行的5种方法
Jun 21 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
用Python实现KNN分类算法
Dec 22 Python
Python实现动态图解析、合成与倒放
Jan 18 Python
python3.x实现base64加密和解密
Mar 28 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
Apr 08 Python
pycharm的python_stubs问题
Apr 08 Python
python爬虫使用requests发送post请求示例详解
Aug 05 Python
python跨文件使用全局变量的实现
Nov 17 Python
Django多个app urls配置代码实例
Nov 26 Python
python中的时区问题
Jan 14 Python
浅谈pytorch中stack和cat的及to_tensor的坑
May 20 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
星际初学者游戏中永远要做的事
2020/03/04 星际争霸
利用PHP实现智能文件类型检测的实现代码
2011/08/02 PHP
php截取后台登陆密码的代码
2012/05/05 PHP
PHP输出时间差函数代码
2013/01/28 PHP
基于php-fpm 参数的深入理解
2013/06/03 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
javascript:window.open弹出窗口的位置问题
2014/03/18 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
使用javascript插入样式
2016/03/14 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
js图片轮播手动切换特效
2017/01/12 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
python爬虫常用的模块分析
2014/08/29 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
使用Kivy将python程序打包为apk文件
2017/07/29 Python
MAC中PyCharm设置python3解释器
2017/12/15 Python
Python实现基于C/S架构的聊天室功能详解
2018/07/07 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
100%法国制造的游戏和玩具:Les Jouets Français
2021/03/02 全球购物
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
公司离职证明标准样本
2014/10/05 职场文书
技术负责人岗位职责
2015/02/10 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python