用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 08 Python
python计算对角线有理函数插值的方法
May 07 Python
python基础教程之匿名函数lambda
Jan 17 Python
Python 文件处理注意事项总结
Apr 10 Python
Python多线程扫描端口代码示例
Feb 09 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
Python数据类型之String字符串实例详解
May 08 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
Python的缺点和劣势分析
Nov 19 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
python uuid生成唯一id或str的最简单案例
Jan 13 Python
一小时学会TensorFlow2之基本操作2实例代码
Sep 04 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
在项目中寻找代码的坏命名
2012/07/14 PHP
PHP 简易输出CSV表格文件的方法详解
2013/06/20 PHP
PHP实现的自定义数组排序函数与排序类示例
2016/11/18 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
PHP与Web页面的交互示例详解一
2020/08/04 PHP
js 加载时自动调整图片大小
2008/05/28 Javascript
JQuery CSS样式控制 学习笔记
2009/07/23 Javascript
javascript 函数速查表
2010/02/07 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
2014/06/20 Javascript
jQuery实现自动调整字体大小的方法
2015/06/15 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
JS获取html元素的标记名实现方法
2016/10/08 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
深入理解JavaScript中的预解析
2017/01/04 Javascript
JavaScript正则表达式的贪婪匹配和非贪婪匹配
2017/09/05 Javascript
在vue项目中使用md5加密的方法
2018/09/14 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
详解python读取image
2019/04/03 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
2021/03/17 Javascript
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
南京迈特望C/C++面试题
2012/07/09 面试题
兰兰过桥教学反思
2014/02/08 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
毕业论文致谢词
2015/05/14 职场文书
学生会主席任命书
2015/09/21 职场文书
关于感恩的作文
2019/08/26 职场文书
vue实现锚点定位功能
2021/06/29 Vue.js
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server