用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自定义进程池实例分析【生产者、消费者模型问题】
Sep 19 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
详解python基础之while循环及if判断
Aug 24 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
对python pandas 画移动平均线的方法详解
Nov 28 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
Jun 17 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
Python视频编辑库MoviePy的使用
Apr 01 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
用Zend Encode编写开发PHP程序
2010/02/21 PHP
php图片加水印原理(超简单的实例代码)
2013/01/18 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
一款JavaScript压缩工具:X2JSCompactor
2007/06/13 Javascript
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
Python实现的简单发送邮件脚本分享
2014/11/07 Python
Python 专题一 函数的基础知识
2017/03/16 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
Python笔记之工厂模式
2019/11/20 Python
python默认参数调用方法解析
2020/02/09 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
解决pip install psycopg2出错问题
2020/07/09 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
采购主管的岗位职责
2013/12/17 职场文书
五年级音乐教学反思
2014/02/06 职场文书
中学生个人自我评价
2014/02/06 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android