用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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
用python实现批量重命名文件的代码
May 25 Python
python中json格式数据输出的简单实现方法
Oct 31 Python
Python执行时间的计算方法小结
Mar 17 Python
Python编程实现正则删除命令功能
Aug 30 Python
详解Python核心对象类型字符串
Feb 11 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
python pandas 如何替换某列的一个值
Jun 09 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
Python基础之函数原理与应用实例详解
Jan 03 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
2014/07/18 PHP
php实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
对存在JavaScript隐式类型转换的四种情况的总结(必看篇)
2017/08/31 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
原生JS实现音乐播放器
2021/01/26 Javascript
python删除本地夹里重复文件的方法
2020/11/19 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
python实现猜拳小游戏
2020/04/05 Python
Python流程控制语句的深入讲解
2020/06/15 Python
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
COSETTE官网:奢华,每天
2020/03/22 全球购物
投标承诺书怎么写
2014/05/24 职场文书
真诚的求职信
2014/07/04 职场文书
研究生导师评语
2014/12/31 职场文书
挂靠协议书
2015/01/27 职场文书
党员个人总结自评
2015/02/14 职场文书
经营场所使用证明
2015/06/19 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
python中redis包操作数据库的教程
2022/04/19 Python
IDEA 2022 Translation 未知错误 翻译文档失败
2022/04/24 Java/Android