用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实现桌面壁纸切换功能
Jan 21 Python
python使用matplotlib画柱状图、散点图
Mar 18 Python
使用python打印十行杨辉三角过程详解
Jul 10 Python
python psutil模块使用方法解析
Aug 01 Python
Python Django框架模板渲染功能示例
Nov 08 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
python Tensor和Array对比分析
Jan 08 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
May 26 Python
Python headers请求头如何实现快速添加
Nov 03 Python
python 实现德洛内三角剖分的操作
Apr 22 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
PHP文件与目录操作示例
2016/12/24 PHP
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
javascript 自定义回调函数示例代码
2014/09/26 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
BootStrap selectpicker
2016/06/20 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
第一次接触Bootstrap框架
2016/10/24 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
使用selenium抓取淘宝的商品信息实例
2018/02/06 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
[02:02]特效爆炸!DOTA2珍宝之瓶待你开启
2018/08/21 DOTA
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
python zip()函数的使用示例
2020/09/23 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
资产评估专业大学生求职信
2013/09/29 职场文书
财务出纳员岗位职责
2013/11/26 职场文书
法人授权委托书范本
2014/04/04 职场文书
高中生评语大全
2014/04/25 职场文书
初三语文教学计划
2015/01/22 职场文书
质量保证书怎么写
2015/02/27 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
2019年怎样写好导游词?
2019/07/02 职场文书