日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2023/12/15 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()函数获取此奇怪的输出,以尝试监听打开的网站的流量?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。