用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进程通信之匿名管道实例讲解
Apr 11 Python
python实现类的静态变量用法实例
May 08 Python
Python实现新浪博客备份的方法
Apr 27 Python
python文件名和文件路径操作实例
Sep 29 Python
用pandas按列合并两个文件的实例
Apr 12 Python
python 限制函数调用次数的实例讲解
Apr 21 Python
在Mac下使用python实现简单的目录树展示方法
Nov 01 Python
解决python3中cv2读取中文路径的问题
Dec 05 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
python对文件目录的操作方法实例总结
Jun 24 Python
用python打印1~20的整数实例讲解
Jul 01 Python
用python实现一个简单计算器(完整DEMO)
Oct 14 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
PHP的面向对象编程
2006/10/09 PHP
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
PHP提高编程效率的20个要点
2015/09/23 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
JavaScript delete操作符应用实例
2009/01/13 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
同一页面多个商品倒计时JS 基于面向对象的javascript
2012/02/16 Javascript
JavaScript DOM操作表格及样式
2015/04/13 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
layui实现三级联动效果
2019/07/26 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
matplotlib作图添加表格实例代码
2018/01/23 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
2020/06/01 Python
Python hashlib模块的使用示例
2020/10/09 Python
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
公司道歉信范文
2014/01/09 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
社会调查研究计划书
2014/05/01 职场文书
学术诚信承诺书
2014/05/26 职场文书
任命书怎么写
2014/06/04 职场文书
高效课堂标语
2014/06/26 职场文书
租房协议书
2014/09/12 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python