python scapy sniff timeout_为什么我尝试使用scapy.sniff()函数获取此奇怪的输出,以尝试监听打开的网站的流量?...
我是Pyhon的新手(主要來自Java),我正在學習Pytohon的課程,該課程適用于Udemy上的安全性,在該課程中提供了一個使用scapy模塊實現數據包嗅探器的示例。我正在使用Python 3,這是我的Python項目的結構,其中突出顯示了scapy版本:
看來可行,但是我對此應用程序的輸出有一些疑問。
這是我腳本的源代碼:
#!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數據包,但這是一個不同的問題;)
總結
以上是生活随笔為你收集整理的python scapy sniff timeout_为什么我尝试使用scapy.sniff()函数获取此奇怪的输出,以尝试监听打开的网站的流量?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习(小游戏)
- 下一篇: python循环数组判断,python的