python scapy sniff timeout_为什么我尝试使用scapy.sniff()函数获取此奇怪的输出,以尝试监听打开的网站的流量?...

我是Pyhon的新手(主要来自Java),我正在学习Pytohon的课程,该课程适用于Udemy上的安全性,在该课程中提供了一个使用scapy模块实现数据包嗅探器的示例。我正在使用Python 3,这是我的Python项目的结构,其中突出显示了scapy版本:

rXpRr.png

看来可行,但是我对此应用程序的输出有一些疑问。

这是我脚本的源代码:

#!usr/bin/env python

# INSTALL THE FOLLOWING PYTHON MODULES:

# - pip3 install scapy

# - pip3 install scapy_http

import scapy.all as scapy

from scapy.layers import http

#

def sniff(interface):

scapy.sniff(iface=interface, store=False, prn=process_sniffed_packet)

def process_sniffed_packet(packet):

#print(packet)

# Check if our packet has HTTP layer. If our packet has the HTTP layer and it is HTTPRequest.

# In this way I am excluding some garbage information in which I am not interested into.

if packet.haslayer(http.HTTPRequest):

print(packet)

sniff("eth0")

因此,此脚本通过以下if语句的内容来监听eth0端口上的流量:

if packet.haslayer(http.HTTPRequest):

print(packet)

它只打印与HTTP层相关的数据包,从而避免打印我不感兴趣的其他垃圾信息。

因此,我执行了脚本,将以下命令启动到我的Linux shell中:

python3 packet_sniffer.py

和脚本等到我在浏览器中打开网站并获得如下输出:

root@kali:~/Documents/PycharmWS/packet_sniffer# python3 packet_sniffer.py

b"\x00PV\xfd\xa9B\x00PV)\x97\xc7\x08\x00E\x00\x01\x9d\xdb\x84@\x00@\x06\x18*\xc0\xa8\xdf\x85\xd8:\xcdC\x90$\x00Pe\xa7\xb3\x8eM\xf9Y\xd6P\x18\xf9\x8aG

在这里我有些怀疑:

1)为什么我得到这个奇怪的字符串作为输出?在Udemy教程上,有一个更易理解的输出,以更清晰的方式显示了包的信息,例如Refereres,User-Agent,Host。我的输出中所有这些\ x ..值是什么?在我看来,它是以某种方式编码的,但是我对此绝对不确定。

2)打开不同的网站有时会在打开特定网站后为我提供输出,但在另一些时间却没有任何输出。这怎么可能?

3)是仅通过HTTP起作用还是通过HTTPS进行嗅探?

怎么了?我想念什么?怎么修复它?

解决方案

问题1

什么是Python字节数组?

那就是包的字节数组。“ \ x55”表示01010101。在python中,字节对象就像一个字符串,但前面带有blikeb"bytes"或b'bytes'。

例如,如果我们获取打印的字节数组的前4个字节,并将其写入文件,则可以根据xxd看到字节表示。

$ python -c 'f=open("temp", "wb");f.write(b"\x00PV\xfd");f.close()'

$ xxd temp

00000000: 0050 56fd .PV.

这里,

b"\x00P"=>0050

b"V\xfd"=>56fd

P字节数组中的第二个char是ASCII char 的十六进制表示P。

因此,您将获得此输出,因为您正在打印数据包的字节。如果要打印其他表示形式。

如何在Scapy中打印数据包

使用packet.show()而不是print(packet)让Scapy为您分析它。

输出将如下所示:

$ python script.py

###[ Ethernet ]###

dst = cc:65:ad:da:39:70

src = 6c:96:cf:d8:7f:e7

type = IPv6

###[ IPv6 ]###

version = 6

tc = 2

fl = 131466

...

###[ HTTP 1 ]###

###[ HTTP Request ]###

Method = 'GET'

Path = '/online'

Http_Version= 'HTTP/1.1'

...

您可以改用print(packet.summary())每个数据包获取如下内容:

Ether / IPv6 / TCP / HTTP / 'GET' '/online' 'HTTP/1.1'

Scapy包对象文档在这里,要查看Python中对象的方法/属性,请使用dir(Object)。

问题2

HTTP与HTTPS是不同的协议。Scapy使用该过滤器监听HTTP,并丢弃HTTPS。

问题3

正确。见2。

最终,如果您想捕获所有数据包,请不要使用过滤器。有一些方法可以解密HTTPS数据包,但这是一个不同的问题;)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值