用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 相关文章推荐
在Linux系统上安装Python的Scrapy框架的教程
Jun 11 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 Python
Python字符编码与函数的基本使用方法
Sep 30 Python
快速查询Python文档方法分享
Dec 27 Python
Python2.7+pytesser实现简单验证码的识别方法
Dec 29 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 Python
Django自定义全局403、404、500错误页面的示例代码
Mar 08 Python
python matplotlib包图像配色方案分享
Mar 14 Python
django model的update时auto_now不被更新的原因及解决方式
Apr 01 Python
python画条形图的具体代码
Apr 20 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
php array_search() 函数使用
2010/04/13 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
2017/08/31 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
JavaScript入门之对象与JSON详解
2011/10/21 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
js关于命名空间的函数实例
2015/02/05 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
关于Python数据结构中字典的心得
2017/12/04 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
python获取中文字符串长度的方法
2018/11/14 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
python使用 zip 同时迭代多个序列示例
2019/07/06 Python
mac系统下Redis安装和使用步骤详解
2019/07/09 Python
python3 批量获取对应端口服务的实例
2019/07/25 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
jupyter notebook实现显示行号
2020/04/13 Python
Python扫描端口的实现
2021/01/25 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
中国跨境电商:Tomtop
2017/03/16 全球购物
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
消防安全责任书
2014/04/14 职场文书
《生命 生命》教学反思
2014/04/19 职场文书
个人四风问题对照检查材料
2014/09/26 职场文书
公司放假通知怎么写
2015/04/15 职场文书
Python还能这么玩之用Python修改了班花的开机密码
2021/06/04 Python