用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实现删除当前目录下除当前脚本以外的文件和文件夹实例
Jul 27 Python
Python编程二分法实现冒泡算法+快速排序代码示例
Jan 15 Python
pandas groupby 分组取每组的前几行记录方法
Apr 20 Python
Python os.rename() 重命名目录和文件的示例
Oct 25 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
使用python serial 获取所有的串口名称的实例
Jul 02 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
python移位运算的实现
Jul 15 Python
python编写微信公众号首图思路详解
Dec 13 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
Apr 17 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 Python
Python标准库pathlib操作目录和文件
Nov 20 Python
Python实现视频自动打码的示例代码
Apr 08 #Python
Python OpenCV实现图形检测示例详解
Python语法学习之进程的创建与常用方法详解
基于PyQt5制作一个群发邮件工具
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
You might like
php正则表达式(regar expression)
2011/09/10 PHP
深入php多态的实现详解
2013/06/09 PHP
解析isset与is_null的区别
2013/08/09 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
ArrayList类(增强版)
2007/04/04 Javascript
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
ES6通过babel转码使用webpack使用import关键字
2016/12/13 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
构建Python包的五个简单准则简介
2015/06/15 Python
Python序列类型的打包和解包实例
2019/12/21 Python
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
美国名表在线商城:Ashford(支持中文)
2019/09/24 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
传媒专业推荐信范文
2013/11/23 职场文书
迷你西餐厅创业计划书范文
2013/12/31 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
群教班子对照检查材料
2014/08/26 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
学习心理学的体会
2014/11/07 职场文书
党员活动总结
2015/02/04 职场文书
2016天猫双十一广告语
2016/01/28 职场文书