用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中正则表达式的用法实例汇总
Aug 18 Python
Python脚本实现代码行数统计代码分享
Mar 10 Python
Python中的异常处理简明介绍
Apr 13 Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 Python
Python之Scrapy爬虫框架安装及简单使用详解
Dec 22 Python
tensorflow构建BP神经网络的方法
Mar 12 Python
python使用生成器实现可迭代对象
Mar 20 Python
使用Flask集成bootstrap的方法
Jul 24 Python
python把1变成01的步骤总结
Feb 27 Python
Python中使用__new__实现单例模式并解析
Jun 25 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
ThinkPHP CURD方法之table方法详解
2014/06/18 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
php 问卷调查结果统计
2015/10/08 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
JS小框架 fly javascript framework
2009/11/26 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
使用FileReader API创建Vue文件阅读器组件
2018/04/03 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
通过JS深度判断两个对象字段相同
2019/06/14 Javascript
微信小程序实现类似微信点击语音播放效果
2020/03/30 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
js模拟实现烟花特效
2020/03/10 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
[03:12]完美世界DOTA2联赛PWL DAY9集锦
2020/11/10 DOTA
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
pandas 层次化索引的实现方法
2019/07/06 Python
python 利用turtle库绘制笑脸和哭脸的例子
2019/11/23 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
阿里旅行:飞猪
2017/01/05 全球购物
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
中专生自我鉴定书范文
2013/12/28 职场文书
计划生育证明书写要求
2014/09/17 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
运动会加油稿
2015/07/22 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
导游词之上海杜莎夫人蜡像馆
2019/11/22 职场文书
mybatis调用sqlserver存储过程返回结果集的方法
2021/05/08 SQL Server
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
CSS极坐标的实例代码
2021/06/03 HTML / CSS