用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 15 Python
pandas数据分组和聚合操作方法
Apr 11 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
python多线程与多进程及其区别详解
Aug 08 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
Django认证系统user对象实现过程解析
Mar 02 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
Python openpyxl模块实现excel读写操作
Jun 30 Python
Windows安装Anaconda3的方法及使用过程详解
Jun 11 Python
浅析Python OpenCV三种滤镜效果
Apr 11 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
基于php iconv函数的使用详解
2013/06/09 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
用JSON做数据传输格式中的一些问题总结
2011/12/21 Javascript
javascript 进阶篇2 CSS XML学习
2012/03/14 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
Js参数值中含有单引号或双引号问题的解决方法
2013/11/06 Javascript
js 实现菜单上下显示附效果图
2013/11/21 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
js实现随机点名程序
2020/09/17 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
python中cPickle用法例子分享
2014/01/03 Python
使用Python对Excel进行读写操作
2017/03/30 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
详解python之协程gevent模块
2018/06/14 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
python定义具名元组实例操作
2021/02/28 Python
12月红领巾广播稿
2014/02/13 职场文书
道德之星事迹材料
2014/05/03 职场文书
农村党员干部承诺书
2015/05/04 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python