如何在linux系统下将用libpcap工具抓来的包还原成原来的用户发送的数据?

如何在linux系统下将用libpcap工具抓来的包还原成原来的用户发送的数据?,第1张

抓到的TCP包需要被decode,去掉包头之后的data段是发送的内容,但是一个tcp包在传输过程中可能被拆分和重组,所以在抓把之后要反向的重轿拿丛组。闭樱

另外如果tcp包本身或者其data段敏搭的内容是加密的,你将什么都看不到

Scapy的交互shell是运行在一个终端会话当中。因为需要root权限才能发送数据包,所以我们在这里使用 sudo

在Windows当中,请打开命令提示符( cmd.exe ),并确保您拥有管理员权限:

如果您没有安装所有的可选包,Scapy将会告诉你有些功能不可用:

虽然没有安装,但发送和接收数据包的基本功能仍能有效。

本节将会告诉您一些Scapy的功能。让我们按上文所述打开Scapy,亲自尝试些例子吧。

让我们来建立一个数据包试一试

/ *** 作符在两层之间起到一个组合的作用。当使用该 *** 作符时,下层可以根据其上层,使它的一个或多个默认字段被重载。(您仍可以赋予您想要的值)一个字符串也可以被用作原料层( raw layer )。

每一个数据包都可以被建立或分解(注意:在Python中 _ (下划线)是上一条语句执行的结果):

我们看到一个分解的数据包将其所有的字段填充。那是因为我认为,附加有原始字符串的字段都有它自身的价值。如果这太冗长, hide_defaults() 方法将会删除具有默认值的字段:

你可以从PCAP文件中读取数据包,并将其写入到一个PCAP文件中。

如果您已经安装PyX,您可以做一个数据包的图形PostScript/ PDF转储(州烂见下面丑陋的PNG图像,PostScript/PDF则具有更好的质量...)

目前我们只是生成一个数据包。让我们看看如何轻易地定制一组数据包。整个数据包的每一个字段(甚至是网络层次)都可以是一组。在这里隐含地定义了一组数据包的概念,意即是使用所有区域之间的笛卡尔乘积来生成的一组数据包。

某些 *** 作(如修改一个数据包中的字符串)无法对于一组数据包使用。在这些情况下,如果您忘记展开您的数据包集合,只有您忘记生成的列表中的第一个元素会被用于组装数据包。

现在我们知道了如何处理数据包。让我们来看看如何发送它们。 send() 函数将会在第3层发送数据包。也就是说它会为你处理路由和第2层的数据。 sendp() 函数将会工作在第2层。选择合适的接口和正确的链路层协议都取决于你。

fuzz() 函数可以通过一个具有随机值、数据类型合适的对象,来改变任何默认值,但该值不能是被计算的(像校验和那样)。这使得可以快速建立循环模糊化测试模板。在下面的例子中,IP层是正常的,UDP层和NTP层被fuzz。UDP的校册颤漏验和是正确的,UDP的目的端口被NTP重载为123,而且NTP的版本被更变为4.其他所有的端口将被随机分组:

现在让我们做一些有趣的事情。 sr() 函数是用来发送数据包和接收应答。该函数返回一对数据包及其应答,还有无应答的数据包。 sr1() 函数是一种变体,用来返回一个应答数据包。发送的数据包必须是第3层报文(IP,ARP等)。 srp() 则是使用第2层报文(以太网,802.3等)。

DNS查询( rd = recursion desired)。主机192.168.5.1是我的DNS服务器。注意从我Linksys来的非空填充具有Etherleak缺陷:

发送和接收函数族是scapy中的核心部分。它们返回一对两个列表。第一个就是发送的数据包及其应答组成的列表,第二个是无应答数据包组成的列表。为了更好地呈现它们,它们被封装成一个对象,并且提供了一些便于 *** 作的方法洞册:

如果对于应答数据包有速度限制,你可以通过 inter 参数来设置两个数据包之间等待的时间间隔。如果有些数据包丢失了,或者设置时间间隔不足以满足要求,你可以重新发送所有无应答数据包。你可以简单地对无应答数据包列表再调用一遍函数,或者去设置 retry 参数。如果retry设置为3,scapy会对无应答的数据包重复发送三次。如果retry设为-3,scapy则会一直发送无应答的数据包,直到。 timeout 参数设置在最后一个数据包发出去之后的等待时间:

在Scapy提示符中执行一下命令,可以对经典的SYN Scan初始化:

以上向Google的80端口发送了一个SYN数据包,会在接收到一个应答后退出:

从以上的输出中可以看出,Google返回了一个SA(SYN-ACK)标志位,表示80端口是open的。

使用其他标志位扫描一下系统的440到443端口:

或者

可以对收集的数据包进行摘要(summary),来快速地浏览响应:

以上显示了我们在扫描过程中的请求应答对。我们也可以用一个循环只显示我们感兴趣的信息:

可以使用 make_table() 函数建立一个表格,更好地显示多个目标信息:

在以上的例子中,如果接收到作为响应的ICMP数据包而不是预期的TCP数据包,就会打印出ICMP差错类型(error type)。

对于更大型的扫描,我们可能对某个响应感兴趣,下面的例子就只显示设置了"SA"标志位的数据包:

如果我们想对响应进行专业分析,我们可以使用使用以下的命令显示哪些端口是open的:

对于更大型的扫描,我们可以建立一个端口开放表:

如果以上的方法还不够,Scapy还包含一个 report_ports() 函数,该函数不仅可以自动化SYN scan,而且还会对收集的结果以LaTeX形式输出:

TCP路由追踪:

注意:TCP路由跟踪和其他高级函数早已被构造好了:

发送和接收数据包的过程是相当复杂的。

我们可以简单地捕获数据包,或者是克隆tcpdump或tethereal的功能。如果没有指定interface,则会 在所有的interface上进行嗅探:

对于控制输出信息,我们可以使用 sprintf() 函数:

我们可以嗅探并进行被动 *** 作系统指纹识别:

猜测 *** 作系统版本前的数字为猜测的精确度。

演示一下bpf过滤器和sprintf()方法:

这儿有一个例子来实现类似(h)ping的功能:你一直发送同样的数据包集合来观察是否发生变化:

通常可以将数据包保存为pcap文件以备后用,或者是供其他的应用程序使用:

还原之前保存的pcap文件:

或者

Scapy允许你以不同的十六进制格式输出编码的数据包。

使用 hexdump() 函数会以经典的hexdump格式输出数据包:

使用 import_hexcap() 函数可以将以上的hexdump重新导入到Scapy中:

使用 str() 函数可以将整个数据包转换成十六进制字符串:

通过选择合适的起始层(例如 Ether() ),我们可以重新导入十六进制字符串。

使用 export_object() 函数,Scapy可以数据包转换成base64编码的Python数据结构:

使用 import_object() 函数,可以将以上输出重新导入到Scapy中:

最后可以使用 save_session() 函数来保存所有的session变量:

使用 load_session() 函数,在下一次你启动Scapy的时候你就能加载保存的session:

现在我们来演示一下 make_table() 函数的功能。该函数的需要一个列表和另一个函数(返回包含三个元素的元组)作为参数。第一个元素是表格x轴上的一个值,第二个元素是y轴上的值,第三个原始则是坐标(x,y)对应的值,其返回结果为一个表格。这个函数有两个变种, make_lined_table() 和 make_tex_table() 来复制/粘贴到你的LaTeX报告中。这些函数都可以作为一个结果对象的方法:

在这里,我们可以看到一个多机并行的traceroute(Scapy的已经有一个多TCP路由跟踪功能,待会儿可以看到):

这里有个更复杂的例子:从他们的IPID字段中识别主机。我们可以看到172.20.80.200只有22端口做出了应答,而172.20.80.201则对所有的端口都有应答,而且172.20.80.197对25端口没有应答,但对其他端口都有应答。

你在使用TTL和显示接收到的TTL等情况下,它可以很轻松地帮你识别网络拓扑结构。

现在Scapy有自己的路由表了,所以将你的数据包以不同于 *** 作系统的方式路由:

我们可以很容易地将收集起来的数据绘制成Gnuplot。(清确保你已经安装了Gnuplot-py和Gnuplot)例如,我们可以通过观察图案知道负载平衡器用了多少个不同的IP堆栈:

Scapy也有强大的TCP traceroute功能。并不像其他traceroute程序那样,需要等待每个节点的回应才去下一个节点,scapy会在同一时间发送所有的数据包。其缺点就是不知道什么时候停止(所以就有maxttl参数),其巨大的优点就是,只用了不到3秒,就可以得到多目标的traceroute结果:

最后一行实际上是该函数的返回结果:traceroute返回一个对象和无应答数据包列表。traceroute返回的是一个经典返回对象更加特殊的版本(实际上是一个子类)。我们可以将其保存以备后用,或者是进行一些例如检查填充的更深层次的观察:

和其他返回对象一样,traceroute对象也可以相加:

Traceroute返回对象有一个非常实用的功能:他们会将得到的所有路线做成一个有向图,并用AS组织路线。你需要安装graphviz。在默认情况下会使用ImageMagick显示图形。

如果你安装了VPython,你就可以用3D来表示traceroute。右边的按钮是旋转图案,中间的按钮是放大缩小,左边的按钮是移动图案。如果你单击一个球,它的IP地址就会出现/消失。如果你按住Ctrl单击一个球,就会扫描21,22,23,25,80和443端口,并显示结果:

frame injection的前提是你的无线网卡和驱动得正确配置好。

以前的软件是无法恢复的,但是可以直接在浏览器找到对应版本的软件重新下载。

Winpcap提供了一个强大的编程接口,它很容易地在各个 *** 作系统之间进行移植,也很方便程序员进行开发。

什么样的程序需要使用Winpcap

很多不同的工具软件使用Winpcap于网络分析,故障排除,网络安全监控等方面。Winpcap特别适用于下面这饥磨几个经典领域:

1、网烂渣斗络及协议分析

2、网络监控

3、通信日志记录

4、trafficgenerators

5、用户级别的桥路和路由

6、网络入侵检测系统(NIDS)

7、网络扫描

8、安全工具

Winpcap有些方面不能做。它不依靠主机的诸如TCP/IP协议去收发数据包。这意味着它不能阻塞,不能处理同一台主机中各程序之间的通信数据。它只能“嗅探”到物理线梁樱路上的数据包。因此它不适用于trafficshapers,QoS调度,以及个人防火墙。

Winpcap内部结构

Winpcap是一个Win32平台下用于抓包和分析的系统。包括一个内核级别的packetfilter,一个底层的DLL(packet.dll)和一个高级的独立于系统的DLL(Wpcap.dll)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12235340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存