新闻| 文章| 资讯| 行情| 企业| wap手机版| article文章| 首页|会员中心|保存桌面|手机浏览
普通会员

青州市冬儿科技公司

企业列表
新闻列表
  • 暂无新闻
推荐企业新闻
联系方式
  • 联系人:汪女士
首页 > 新闻中心 > python网络渗透之:扫描探测篇
新闻中心
python网络渗透之:扫描探测篇
发布时间:2024-11-13        浏览次数:0        返回列表

本篇文章主要介绍Sacpy的内容通过Scapy如何编写一个简单的ping扫描工具,基于存活的主机通过socket编写一个TCP端口扫描器进行端口扫描探测,看看python在网络渗透的信息收集中起到的作用。

python网络渗透之:扫描探测篇

神器介绍:Scapy

1.Scapy的简介

关于Scapy,Scapy是一个python程序,它允许用户发送、嗅探、解析和伪造网络数据包。此程序允许构建可以探测、扫描、或攻击网络的工具。

换句话说,Scapy是一个强大的交互式数据包操作程序。它能够伪造或解码多种协议的数据包,在网上发送数据包,捕获数据包,匹配请求和回复,等等。Scapy可以轻松处理大多数经典任务,如:扫描、跟踪路由、探测、单元测试、攻击或网络发现。他可以取代hping、arpsopof、arp-sk、arping、p0f,甚至是nmap、tcpdump和tshark的某些部分。可以说Scapy是我们网络渗透中的一个神器

2.Scapy的安装

在具有python的环境下使用pip来安装

3.开启Scapy

在命令模式下键入来启动Scapy的交互式界面,该界面是一个基于python命令行的界面,可以看到显示效果如下

在这里插入图片描述

4.初步尝试

  • 前面介绍过了,Scapy是一个强大的数据包操作程序,它可以允许用户发送、嗅探、解析和伪造网络数据包。

那么我们先来尝试构造一个IP数据包,我们尝试让一个data变量来接收

在这里插入图片描述

接下来我们使用方法来显示该数据包

在这里插入图片描述

IP数据包的格式如图

在这里插入图片描述

在这里插入图片描述

根据上面ip数据包的格式图以及解释我们大致就可以知道这个IP数据包的基本内容了。

查看了我们构造的ip数据包可以看到,我们并没有向数据包中添加任何的数据,但Scapy会会帮助我们自动填充数据据内容。

接下来我们向data的IP数据包中添加目的地址,我们不用尝试添加源地址因为Scapy会帮我们填入,并且再加上一个ICMP的数据包(因为ICMP 数据包是用于诊断网络问题的,当我发送了ICMP数据包该服务器就会发送ICMP响应数据包给我)使用来发送用send_receive_1来接收

在这里插入图片描述

在这里插入图片描述

查看该响应数据包

在这里插入图片描述

我们可以使用方法来提取IP数据包里的数据,同时还可以查看里的字典数据内容

在这里插入图片描述

  • 解释发送数据包的方法

     

编写一个简单的ping扫描工具

前面我们已经介绍了一个神器:Scapy,并且简单的讲解了Scapy如何构造一个数据包将数据包进行发送。

那么我们现在就使用python来编写一个简单的ping扫描工具。

ping扫描的介绍

ping扫描是一种简单且有效的网络扫描技术用于确定网络中哪些主句处于存活状态。它通过向目标主机发送ICMP请求数据包来工作。如果该目标主句收到数据包并且响应,则该主机处于活动状态。如果目标主机没有收到数据包或没有响应,则该主机处于非活动状态。

编写代码

在这里插入图片描述

  1. 可以看到我们首先构造了一个IP/ICMP的数据包它们是工作在第三层也就是网络层协议上的。
  2. 在IP()数据包中,我们填写了src源地址、id标识符、dst目的地址、ttl生命周期值
  3. 在ICMP()数据包中,我们填写了id标识符、seq序列号
  4. 我们将构造好的数据包赋值给了data_package
  5. 接下来我们使用sr1来发送第三层数据包,并且只接收一个响应

执行效果

在这里插入图片描述

可以看到,当我们将数据包发送给目的地址192.168.64.131,很快192.168.64.131就发送了响应数据包,说明我们ping成功了。

接下来我们对该脚本进行一个改造,使其达到一个更好的效果

编写代码

 
  • 先来解释一下

这段代码是一个基于Scapy库的Ping扫描器,可以用于扫描指定IP地址或者指定网段下的所有IP地址是否存活。以下是代码的详细解释和注释

导入所需的库

 

定义Ping扫描函数

 

判断命令行参数并执行相应的操作

 

运行效果

在这里插入图片描述

在这里插入图片描述

可以看到,程序正常扫描出了指定的IP存活主机和IP网段主机,并显示了扫描结果。那么存活主机扫描完了,我们就可以对存活的主机进行端口扫描,看看目标主机开放了哪些端口。


编写一个简单的TCP端口扫描器

其实TCP端口扫描器也可以用Scapy来进行编写,但这次我们使用Socket来编写。

Socket简介

所谓的socket,中文翻译就是“套接字”,是计算机网络中进程间通信的基本数据结构,它是应用层与传输层之间的抽象层。套接字在应用层提供一个接口,应用程序可以通过套接字进行网络通信。

socket 的类型有以下几种

  • AF_INET:这表示使用 IPv4 协议。
  • AF_INET6:这表示使用 IPv6 协议。
  • AF_UNIX:这表示使用 Unix 域协议。

socket 的协议有以下几种

  • SOCK_STREAM:这表示使用面向连接的 socket。
  • SOCK_DGRAM:这表示使用无连接的 socket。
  • SOCK_RAW:这表示使用原始 socket

以下是socket的一个描述图

在这里插入图片描述

开始编写代码之前我们先列出具体的方案

  1. 这个端口扫描器,可以扫描指定 IP 地址的指定端口或所有端口。

  2. 首先,我们需要导入 socket、sys、threading 和 time 模块。socket 模块提供了网络编程的接口,sys 模块提供了系统相关的函数,threading模块提供了多线程服务,time 模块提供了时间相关的函数。

  3. 然后,我们定义一个 类,这样方便我们维护管理,这个类包含了扫描端口的所有方法,以及显示使用信息和log界面的方法。

  4. 在 类中,我们定义 和 两个方法。 方法用于显示程序的log界面, 方法用于显示程序的使用方法。

  5. 在 类中,我们定义 方法。 方法用于扫描指定 IP 地址的指定端口或所有端口。

  6. 在 函数中,我们创建一个 对象。然后,我们根据用户的输入,调用不同的方法来扫描端口。

  7. 我们在 函数中捕获异常,并在异常发生时显示错误信息。

:程序log界面我们使用来生成

编写代码

 

运行效果

在这里插入图片描述

在这里插入图片描述