用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 时间处理datetime实例
Sep 06 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
Nov 23 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
Apr 09 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
Python3+PyInstall+Sciter解决报错缺少dll、html等文件问题
Jul 15 Python
Python上下文管理器全实例详解
Nov 12 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
基于Tensorflow的MNIST手写数字识别分类
Jun 17 Python
Python错误的处理方法
Jun 23 Python
scrapy在python爬虫中搭建出错的解决方法
Nov 22 Python
Python的logging模块基本用法
Dec 24 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
PL-880隐藏功能
2021/03/01 无线电
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
IE的事件传递-event.cancelBubble示例介绍
2014/01/12 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
基于jQuery实现左右图片轮播(原理通用)
2015/12/24 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
Python去除列表中重复元素的方法
2015/03/20 Python
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
python实现ip地址的包含关系判断
2020/02/07 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
劳动之星获奖感言
2014/02/01 职场文书
大学毕业生推荐信
2014/07/09 职场文书
好的促销活动方案
2014/08/21 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
《法国号》教学反思
2016/02/22 职场文书
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
使用tensorflow 实现反向传播求导
2021/05/26 Python
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android