基于Python编写一个简单的端口扫描器
作者:somenzz 发布时间:2021-09-19 09:21:22
标签:Python,端口,扫描
端口扫描是非常实用的,不止用在信息安全方面,日常的运维也用得到。这方面的工具也不要太多,搞过 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 行,运行效果如下:
来源:https://mp.weixin.qq.com/s/Drk6y3lUEegxII8XNd7sww


猜你喜欢
- 一、缺失数据剔除1. python 方式获取所有的缺失值,返回一个 true 和 false 的表df.isnull()统计缺失值,按照每一
- 一些小技巧1. 如何查出效率低的语句?在MySQL下,在启动参数中设置 --log-slow-queries=[文件名],就可以在指定的日志
- Java基础—学生信息管理系统(使用数据库),供大家参考,具体内容如下前一段时间写了学生信息管理系统(使用ArrayLi
- 这是网站制作很流行的下拉列表两级连动的代码,也是很多人使用的代码。下面,先来看这段代码:<%dim countset&nbs
- 一,fso.GetFile提取文件相应的 File 对象1,getfile.asp<%whichfile=Serv
- 用requests包请求https的网站时,我们偶尔会遇到证书问题。也就是常见的SSLerror,遇到这种问题莫慌莫慌。这里没有找到合适的网
- 随着“ * ”建设的逐步深入和 * 信息化的高速发展, * 计算机应用系统被广泛应用在各警种、各部门。与此同时,应用系统体系的核心、系统数据的
- 代码很简单,主要是修改了下百度分享的部分代码,小伙伴们自己对比下。<div class="tool_title"&
- 让 PHP 支持 MySQLPHP 有专有的 MySQL 函数库以使用操作 MYSQL 数据库。在 PHP 5 及以后版本中不再
- 分享一下刚遇到的一个小问题,我有一段类似于这样的python代码:# coding: utf-8class A(object):
- virtualenv创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库。
- 如下所示:./src/github.com/sirupsen/logrus/terminal_check_notappengine.go:9
- 如何做一个文本书写器?我们有下面的的函数,可做“文本书写器”:<%function WriteToFile(FileName
- 1.3 安装 ASP.net跟基督山一起检查你们的计算机哦CPU Pentium II 450以上,推荐733内存 256M 推荐 512M
- 服务端:#!/usr/bin/envimport SocketServerclass myMonitorHandler(SocketServ
- 本文实例讲述了Python实现的KMeans聚类算法。分享给大家供大家参考,具体如下:菜鸟一枚,编程初学者,最近想使用Python3实现几个
- 用采集程序的优点有:无须维护网站,因为采集程序中的数据来自其他网站,它将随着该网站的更新而更新;可以节省服务器资源,一般采集程序就几个文件,
- 在新版的MVC6中,微软提供了强大的TagHelper功能,以便让我们摆脱如下的臃肿代码:@Html.LabelFor(model =>
- 前言:柱状图是一种使用矩形柱来表示数据分布的图表,可以横向排列,也可以纵向排列,它的高度或长度和他们所代表的值成正比关系。Matplotli
- CSS入门很简单,规则不多,写法也比较灵活,因此也带来了很多有创意的写法。跟IE一样,很好的容错性,像《 边框样式写法总结 》所说的bord