黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第三章 网络工程-原始套接字与嗅探(1)主机发现工具

文章目录

  • 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第三章 网络工程-原始套接字与嗅探(1)主机发现工具
  • 写在前面
  • 构建一个UDP主机发现工具
  • windows和linux下的包嗅探工具
    • 小试牛刀
      • 在Windows主机下
      • 在Linux下

写在前面

网络嗅探能够让你看清流入和流程目标主机的数据包,因此在(漏洞)开发前后有很多实际用途。有些情况下,你可以使用现成的网络嗅探工具,例如Wireshark(https://wireshark.org)或者Scapy(下一章节将会介绍)这样的Python解决方案。尽管如此,了解如何快速使用自己的嗅探器查看和解码网络流量还是很有好处的。
编写这样的工具能够让你对成熟的工具有深刻的了解,因为这些工具可以处理更加精细的点,而您只需付出较少的努力。你还将学习一些新的python技术,这也许会更好的理解低级网络位是如何工作的。
在前面的章节中我们介绍了如何使用TCP和UDP发送和接收数据,这可能是读者跟大多数网络服务交互的方式。但是,在这些高级协议下面,是决定网络数据包发送和接收方式的构建块。你将会使用原始套接字访问底层次的网络信息,例如原始的IP协议和ICMP协议头。在本章中,我们无需解包任何的以太网消息,但是如果你想要执行一些底层次的攻击,如ARP中毒,或者你想要开发无线接入工具,你应当熟悉以太网帧及其使用。
接下来,就让我们从如何发现网络上的活动主机开始这段旅程。

构建一个UDP主机发现工具

我们的嗅探器的主要目的是发现目标网络上的主机。作为一个攻击者,希望看到网络上的所有潜在目标,以便能够进一步的侦查和利用。
我们将会使用大多数操作系统已知的行为来确定在特定的IP地址上是否有活动的主机。当我们向主机的一个关闭的端口发送UDP数据报的时候,主机一般情况下会返回端口不可达的ICMP消息。这种ICMP消息告诉我们目标地址有个活动主机,如果没有主机的话,我们通常不会收到任何UDP响应数据报。因此,我们必需选择一个不太使用的UDP端口,为了获得更大的范围,我们可以探测多个端口,以确保没有命中活动的UDP服务。
为什么使用UDP协议?因为在整个子网中发送消息并等待ICMP响应没有任何开销。这是一个非常简单的扫描工具,因为大部分工作都要解码和分析各种网络协议头。我们将为Windows和Linux实现这个主机扫描程序,以最大限度地提高在企业环境中使用它的可能性。
我们还可以在扫描工具中构建额外的逻辑,以便在我们发现的任何主机上启动完整的Nmap端口扫描。这样,我们可以确定他们是否有可行的网络攻击面。接下来我们就开始。

windows和linux下的包嗅探工具

在Windows中访问原始套接字的过程与在Linux上略有不同,但我们希望能够灵活地将同一个嗅探器部署到多个平台。因此,我们将创建一个socket对象,然后确定我们在哪个平台上运行。在Windows下,我们将通过一个socket输入/输出控制设置一些额外的标志,这允许在网络接口上启用混杂模式。
在第一个示例中,我们简单地设置了原始socket嗅探,读入一个数据包,然后退出:

import socket
import os# host to listen on
HOST = '192.168.65.141'def main():# create raw socket, bin to public interfaceif os.name == 'nt':socket_protocol = socket.IPPROTO_IPelse:socket_protocol = socket.IPPROTO_ICMP# constructing socket objet with parameters nessessary for sniffinf packets on network interfacesniffer = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket_protocol)sniffer.bind((HOST, 0))# set the socket options, include the iP header in the capturesniffer.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)# if we are using windows, send an IOCTL to the network card driver to enable promiscuous mode.if os.name == 'nt':sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)# read one packet, and print out the entire raw packet with no decodingprint(sniffer.recvfrom(65565))# if we're on windows, turn off promiscuous mode# if we're on windows, disable the promiscuous modeif os.name == 'nt':sniffer.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)if __name__ == '__main__':main()

嗅探器在Windows下和Linux下的不同之处在于,Windows将会允许我们嗅探所有进来的数据包而不关注协议,Linux将会强制我们设置嗅探的是ICMP数据包。注意我们现在启用的是混杂模式,这将会需要Windows下的管理员或者Linux下的root权限。混杂模式允许我们嗅探网卡所见的所有数据包,包括那些跟我们的特定主机无关的。如果读者当前是在虚拟机上运行的windows,很有可能会收到一个提示信息,说明客户机操作系统正在启用混杂模式,允许即可。到目前为止,我们已经能做好了进行一个实际嗅探的准备。

小试牛刀

下面我们就分别在windows和linux下试用一下我们的脚本。

在Windows主机下

新开一个命令行窗口,直接python运行上述代码,如下图所示,说明已经开始监听。

在linux虚拟机下,ping 虚拟机的网关地址(192.168.65.1),在嗅探器上会得到如下图所示的内容。

在windows主机下直接ping虚拟机网关地址(192.168.65.1),嗅探器上返回结果如下图所示。

在Linux下

新开一个命令行窗口,同样运行脚本(试了一下,linux下得用sudo,另外需要修改一下脚本监听linux机器的IP地址),开始监听,如下图所示。

在windows主机下ping一下linux主机IP,嗅探器返回如下的结果,如下图。

在运行嗅探器的linux虚拟机本机ping其IP地址,嗅探器返回如下的结果,如下图。

从上面的运行示例中可以看出,我们正确捕获了初始化ICMP的ping请求包。仅仅获取一两个数据包没有实际的意义,接下来我们将加入一下其它的功能,来获取更多的包,并解码数据包。

黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第三章 网络工程-原始套接字与嗅探(1)主机发现工具与包嗅探相关推荐

  1. 【Python自然语言处理】读书笔记:第三章:处理原始文本

    本章原文链接:https://usyiyi.github.io/nlp-py-2e-zh/3.html 3 处理原始文本 import nltk, re, pprint from nltk impor ...

  2. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第01章 语言处理与Python

    第01章 语言处理与Python 1.1 语言计算:文本和单词 Python入门 NLTK 入门 搜索文本 计数词汇 1.2 近观Python:将文本当做词链表 链表(list,也叫列表) 索引列表 ...

  3. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第10章 分析句子的意思

    第10章 分析句子的意思 10.1 自然语言理解 查询数据库 自然语言.语义和逻辑 10.2 命题逻辑 10.3 一阶逻辑 一阶定理证明 一阶逻辑语言总结 真值模型 独立变量和赋值 量化 量词范围歧义 ...

  4. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第02章 获得文本语料和词汇资源

    第02章 获得文本语料和词汇资源 2.1 获取文本语料库 古腾堡语料库 网络和聊天文本 布朗语料库 路透社语料库 就职演说语料库 标注文本语料库 在其他语言的语料库 文本语料库的结构 载入你自己的语料 ...

  5. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第05章 分类和标注词汇

    第05章 分类和标注词汇 5.1 使用词性标注器 5.2 标注语料库 表示已标注的标识 读取已标注的语料库 简化的词性标记集 名词 动词 形容词和副词 未简化的标记 探索已标注的语料库 5.3 使用P ...

  6. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第03章 加工原料文本

    第03章 加工原料文本 3.1 从网络和硬盘访问文本 电子书 处理的HTML 处理搜索引擎的结果 处理RSS 订阅 读取本地文件 从PDF.MS Word 及其他二进制格式中提取文本 捕获用户输入 N ...

  7. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第11章 语言数据管理

    第11章 语言数据管理 11.1 语料库结构:一个案例研究 主要设计特点 基本数据类型 11.2 语料库生命周期 语料库创建的三种方案 质量控制 维护与演变 11.3 数据采集 从网上获取数据 从字处 ...

  8. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第04章 编写结构化程序

    第04章 编写结构化程序 4.1 回到基础 赋值 等式 条件语句 4.2 序列 序列类型上的操作 合并不同类型的序列 产生器表达式 4.3 风格的问题 过程风格与声明风格 计数器的一些合理用途 4.4 ...

  9. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第09章 建立基于特征的文法

    第09章 建立基于特征的文法 9.1 文法特征 句法协议 使用属性和约束 术语 9.2 处理特征结构 包含和统一 9.3 扩展基于特征的文法 子类别 核心词回顾 助动词与倒装 无限制依赖成分 9.4 ...

最新文章

  1. 软件测试培训适合什么人学习?
  2. Python 技术篇-使用opencv库读取中文路径图片报错解决办法
  3. 后端学习 - Java容器
  4. POJ-3041 匈牙利算法 二分图最大匹配
  5. QML工作笔记-为PushButton戴上皮肤
  6. Python之struct介绍及详解(与C/C++通信结构体的交互)
  7. excel小写转大写公式_喂!这边居然有演示的Excel快捷键!
  8. DbUtils jar包下载
  9. Unity组件脚本的常用类和结构体GameObject
  10. umijs 出错 TypeError: rawData.some is not a function
  11. 防病毒服务器维护记录表,机房巡检记录表.doc
  12. qt打开xls文件_Qt读取excel文件的两种方法
  13. 线性稳压芯片的选取要素
  14. 常用web前端UI组件库
  15. 计算机教学研修心得英语,网络研修培训心得体会(精选5篇)
  16. 2021年广东工业大学第11届腾讯杯新生程序设计竞赛(同步赛)F osu
  17. markman高效的设计稿标注、测量工具
  18. delphi 调用浏览器内核_深入理解浏览器原理
  19. Echarts 鼠标hover时柱状图设置背景色
  20. 电力电子技术的matlab实践 pdf,MATLAB 在电力电子技术中的应用.pdf

热门文章

  1. 皮卡丘Unsafe Filedownload
  2. 为电竞而声:1MORE万魔耳机新品亮相ChinaJoy
  3. 戴什么耳机跑步好?不妨试试这几款专业运动耳机
  4. 职场IT老手教你3步教你玩转可视化大屏设计,让领导眼前一亮!
  5. 打标签制作自己的数据集并在TensorFlow框架上训练
  6. 专业人才为贵阳大数据建言献计
  7. IntelliJ IDEA修改背景颜色大全(护眼绿等)设置注释颜色
  8. 小米10至尊纪念版和vivox50pro+ 的区别哪个好
  9. matlab使用日记(一)
  10. 【信贷业务】金融信贷存量客户运营管理