用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环境变量设置方法
Aug 28 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
Python中shapefile转换geojson的示例
Jan 03 Python
PyCharm的设置方法和第一个Python程序的建立
Jan 16 Python
对python中词典的values值的修改或新增KEY详解
Jan 20 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
Python实现微信好友的数据分析
Dec 16 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
Jupyter notebook 启动闪退问题的解决
Apr 13 Python
python中super()函数的理解与基本使用
Aug 30 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
生成卡号php代码
2008/04/09 PHP
PHP批量生成缩略图的代码
2008/07/19 PHP
通俗易懂的php防注入代码
2010/04/07 PHP
PHP与SQL注入攻击防范小技巧
2011/09/16 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
php实现快速排序法函数代码
2012/08/27 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
List all the Databases on a SQL Server
2007/06/21 Javascript
JS学习之一个简易的日历控件
2010/03/24 Javascript
Javascript表达式中连续的 && 和 || 之赋值区别
2010/10/17 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
Python实现base64编码的图片保存到本地功能示例
2018/06/22 Python
Python实现微信机器人的方法
2019/09/06 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
机关驾驶员违规检讨书
2014/09/13 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
应聘教师自荐信
2015/03/26 职场文书
行政介绍信范文
2015/05/04 职场文书
总结一下关于在Java8中使用stream流踩过的一些坑
2021/06/24 Java/Android