【Python安全编程】Python实现网络主机和端口扫描
文章目录
- 前言
- 环境准备
- Python实现主机扫描
- 基于ARP协议
- 基于ICMP协议
- 普通版本
- 多线程版本
- Python实现端口扫描
- 扫描单个端口
- 利用多线程扫描端口
- 后记
前言
本文主要讲几个利用Python实现网络扫描的小例子,可以结合多线程或多进程编程改进实例
我曾经走过多遥远的路
跨越过多少海洋去看你
环境准备
- Python3环境
- scapy库
- socket库
- 能与物理机正常通信的虚拟机
由于本文实验目的为实现网络扫描,即探测网络中存活的主机,为了避免影响真实的网络环境,建议通过虚拟机进行实验,确保主机和虚拟机之间网络通信正常即可。
scapy库和socket库都可以通过pip命令直接安装:
pip install scapy
Python实现主机扫描
基于ARP协议
ARP协议这里不做过多讲解,大家自行百度即可,扫描目标主机的工作原理大致如下:
- 首先向目标主机发送一个ARP Request请求
- 若目标主机回应了ARP Reply,则表明目标主机可能存活
- 若目标主机没有回应,则表明目标主机可能处于非活跃状态
需要注意的是,这里我们可以直接发送MAC地址全为F的广播报文,而不需要单独给每个IP主机发送数据包,这样能够极大的优化系统运行时间
实验代码
注意:由于我这里虚拟机在VMnet8虚拟网卡上,因此我们发送数据包的时候应该选择对应的网卡进行实验,windows下可以通过ipconfig /all命令查看对应网卡的名称和属性
from scapy.all import *# 设置发送数据包的网卡
send_iface = "VMware Virtual Ethernet Adapter for VMnet8"# 扫描IP地址范围
ip_range = "10.0.0.0/24"# 发送ARP请求并获取响应
ans, unans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip_range), iface=send_iface, timeout=2)# 打印响应结果
for snd, rcv in ans:print(f"{rcv.psrc} is up.")
代码执行结果:
其中的10.0.0.171就是我开启的虚拟机,可以看到代码成功执行并扫描到了目标主机的IP地址
基于ICMP协议
基于ICMP协议的主机扫描原理类似,这里我们将需要对每个主机发送ARP请求报文
普通版本
常规书写的代码如下:
from scapy.all import *# 输入需要扫描的IP地址范围
ip_range = '10.0.0.0/24'# 输入需要发送数据包的网卡名
iface = "VMware Virtual Ethernet Adapter for VMnet8"# 定义发送的ICMP数据包
packet = IP(dst=ip_range)/ICMP()# 扫描IP地址范围段
ans, unans = sr(packet, iface=iface)# 输出扫描结果
print("以下IP地址可用:")
for s, r in ans:print(r.sprintf("%IP.src%"))
由于遍历每个IP再发送ICMP请求包的方式速度较慢,在网络条件允许的情况下可以用多线程的方式改写上述代码
多线程版本
import threading
from scapy.all import *
import logging
#关闭warning警告信息
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)def scan(ip_list, iface):for ip in ip_list:pkt = IP(dst=ip)/ICMP()res = sr1(pkt, timeout=1, iface=iface, verbose=0)if res:print(f"{ip} is up")def scan_ips(target_ips, iface, thread_count=10):ip_lists = [[] for _ in range(thread_count)]for i, ip in enumerate(target_ips):ip_lists[i % thread_count].append(ip)threads = []for ip_list in ip_lists:thread = threading.Thread(target=scan, args=(ip_list, iface))threads.append(thread)thread.start()for thread in threads:thread.join()if __name__ == '__main__':ips = ["10.0.0.{}".format(i) for i in range(1, 201)]iface = "VMware Virtual Ethernet Adapter for VMnet8"scan_ips(ips, iface, thread_count=10)
执行该代码即可得到目标网段中存活的主机IP
Python实现端口扫描
扫描单个端口
这里主要演示利用socket库进行端口扫描,这里利用虚拟机的22端口为例进行实验:
from socket import *def portScanner(host, port):try:s = socket(AF_INET, SOCK_STREAM)s.connect((host,port))print('[*]',host,port,'open')s.close()except:print('[-]',host,port,'close')portScanner('10.0.0.171',22)
利用多线程扫描端口
利用多线程扫描端口的实例如下:
import socket
import threading# 定义扫描函数
def scan_port(ip, port):try:# 创建套接字sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(1)# 连接目标主机的指定端口result = sock.connect_ex((ip, port))if result == 0:print(f"Port {port} is open on {ip}")# 关闭套接字sock.close()except Exception as e:print(e)pass# 定义多线程扫描函数
def scan_thread(ip, start_port, end_port):for port in range(start_port, end_port):scan_port(ip, port)# 主函数
if __name__ == '__main__':# 设置要扫描的主机和端口范围target_host = '10.0.0.171'start_port = 1end_port = 65536tpool=[]# 创建多个线程进行扫描for i in range(start_port-1, (end_port+1)//100):t = threading.Thread(target=scan_thread, args=(target_host, i*100+1, (i+1)*100))t.start()tpool.append(t)for t in tpool:t.join()
运行效果:
后记
以上就是本文的全部内容,若有疑问欢迎评论留言或与我联系~
相关文章:

【Python安全编程】Python实现网络主机和端口扫描
文章目录前言环境准备Python实现主机扫描基于ARP协议基于ICMP协议普通版本多线程版本Python实现端口扫描扫描单个端口利用多线程扫描端口后记前言 本文主要讲几个利用Python实现网络扫描的小例子,可以结合多线程或多进程编程改进实例 我曾经走过多遥远的路 跨越过多…...

四大垃圾回收算法七大垃圾回收器
JVM的运行时内存也叫做JVM堆,从GC的角度可以将JVM分为新生代、老年代和永久代。其中新生代默认占1/3堆内存空间,老年代默认占2/3堆内存空间,永久代占非常少的对内存空间。新生代又分为Eden区、SurvivorFrom区和SurvivorTo区, Eden…...

P1217 [USACO1.5]回文质数 Prime Palindromes
[USACO1.5]回文质数 Prime Palindromes 题目描述 因为 151151151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151151151 是回文质数。 写一个程序来找出范围 [a,b](5≤a<b≤100,000,000)[a,b] (5 \le a < b \l…...

用大白话给你科普,到底什么是 API(应用程序编程接口)?
何为API?如果你在百度百科上搜索,你会得到如下结果:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组…...

企业电子招采系统源码——信息数智化招采系统
信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…...
【vnc】Ubuntu20.04+vnc安装和配置(中文输入法)
Ubuntu20.04vnc安装和配置(中文输入法) 安装vnc 用以下apt 命令安装: sudo apt install tigervnc-common tigervnc-standalone-server tigervnc-viewer tigervnc-xorg-extension注意,要用standalone-server版本,不要下载Tiger官方安装包&a…...

【排序算法】数据结构排序详解
前言: 今天我们将讲解我们数据结构初阶的最后一部分知识的学习,也是最为“炸裂”的知识---------排序算法的讲解!!!! 目录1.排序的概念及其运用1.1排序的概念1.2排序运用2.常见排序算法的实现2.1 插入排序2…...
【docker知识】DockerFile语法 1:注释指令、解释器指令
一、说明 在docker的指令下工作,似乎很简单,然而,对于复杂工程,这些初级知识是不够的。正确使用DockerFile构建镜像是必须的技能。我们这里假定您已经熟练docker的指令,我们继续上升一个台阶,如何用build和…...
[失业前端恶补算法]JavaScript leetcode刷题top100(一)
专栏声明:只求用最简单的,容易理解的方法通过,不求优化,不喜勿喷 今天更新五个 easy 难度题目: 两数之和 题面 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的…...

HTTP协议
目录 一、HTTP协议 1.http 2.url url的组成: url的保留字符: 3.http协议格式编辑 ①http request ②http response 4.对request做出响应 5.GET与POST方法 ①GET ②POST 7.HTTP常见Header ①Content-Type:: 数据类型(text/html等)在上文…...
javafx学习教程
1.舞台,场景,布局,控件,回调 2.舞台:窗口,一个舞台一个窗口,舞台有舞台基础属性,舞台监听事件,做一些回调 3.fxml里面可以写 页面的布局,控件,然…...

百度百科创建词条教程合集分享,赶紧收藏起来
每一个企业、品牌、人物、产品想要提升自己的知名度,都要创建一个属于自己的百度百科词条,互联网时代,百度搜索引擎的地位是不可撼动的,每天都有上亿的用户在百度上搜索相关内容,百度百科词条在网络营销中占据着举足轻…...

镜像恒流源电路分析
在改进型差动放大器中,用恒流源取代射极电阻RE,既为差动放大电路设置了合适的静态工作电流,又大大增强了共模负反馈作用,使电路具有了更强的抑制共模信号的能力,且不需要很高的电源电压,所以,恒…...

奥威软件宏昊化工启动BI项目,打造智能制造标杆
近日,中国纺织行业领先企业宏昊化工有限公司成功启动了与奥威签订的BI项目,期望通过BI的建立进一步提升企业数字化经营能力和核心竞争力。 奥威bi数据分析软件 在全球经济形势不明朗,国内外市场竞争加剧叠加疫情反复的情况下,化工…...

GitHub访问问题与FastGithub下载及使用(详细篇)
前言 📜 “ 作者 久绊A ” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴 目录 前言 FastGithub的介绍 FastGithub的下载 FastGithub的安装及…...

这个打上实时补丁的Linux内核,大家可以看一下
前言最近看到一个关于实时Linux内核的开源项目,是一个比较牛逼的公司发起的,想推荐给大家。Linux的实时性一直是被很多开发者诟病的,一个分时系统怎么能在工业领域发挥自己的长处呢,我认为研究Linux的实时性是非常有必要的&#x…...

三维形体的表面积
三维形体的表面积 在 N * N 的网格上,我们放置一些 1 * 1 * 1 的立方体。 每个值 v grid[i][j] 表示 v 个正方体叠放在对应单元格 (i, j) 上。 请你返回最终形体的表面积。 例子: 输入:[[2,1],[1,0]]输出:18 解题思路࿱…...

二维码数据压缩实践 | 使用python对二维码数据进行压缩 |不乱码,支持中文
当前二维码的应用越来越广泛,包括疫情时期的健康码也是应用二维码的典型案例,最近需要通过一张二维码显示较多文本数据,也就是对二维码数据进行压缩,使用CSDN搜索了半天居然没有能简单使用的代码,很多事例代码解决不了…...

C语言学习_DAY_3_基本数据类型_运算符与表达式【C语言学习笔记】
目录 I. 基本数据类型 II. 复杂的输出和输入语句编写 III. 运算符与表达式 III.I 算术运算符 III.II 关系运算符 III.III 逻辑运算符 III.IV 位运算符 III.V 三目运算符 III.VI 逗号运算符 高质量博主,点个关注不迷路🌸🌸dz…...
c++练习题(4)
题号:1 设int a3,b2;则a*b的结果是() A、2 B、7 C、3 D、8 题号:2 一个程序单位中不包括以下哪项() A、伪代码 B、函数 C、预处理指令 D、全局声明 题号:3 若a-14,…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...

Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...