用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中的round()方法
May 15 Python
利用python程序帮大家清理windows垃圾
Jan 15 Python
Python的CGIHTTPServer交互实现详解
Feb 08 Python
Python切片工具pillow用法示例
Mar 30 Python
Python爬虫框架Scrapy基本用法入门教程
Jul 26 Python
TensorFlow实现模型评估
Sep 07 Python
Python中extend和append的区别讲解
Jan 24 Python
简单了解python中的与或非运算
Sep 18 Python
python集合删除多种方法详解
Feb 10 Python
python 操作mysql数据中fetchone()和fetchall()方式
May 15 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
详解Python描述符的工作原理
Jun 11 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
发一个php简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
zf框架的session会话周期及次数限制使用示例
2014/03/13 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
PHP调用wsdl文件类型的接口代码分享
2014/11/19 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
基于jQuery实现简单人工智能聊天室
2017/02/10 Javascript
JS表单传值和URL编码转换
2018/03/03 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
Python操作列表之List.insert()方法的使用
2015/05/20 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
python实现多层感知器MLP(基于双月数据集)
2019/01/18 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
中学生差生评语
2014/01/30 职场文书
生日主持词
2014/03/20 职场文书
党员群众路线对照检查材料
2014/08/31 职场文书
消防演习感想
2015/08/10 职场文书
和领导吃饭祝酒词
2015/08/11 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
中学生打架检讨书之500字
2019/08/06 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript
实现AJAX异步调用和局部刷新的基本步骤
2022/03/17 Javascript
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python