gpt4 book ai didi

python - 在 python/scapy 中采样流量

转载 作者:太空宇宙 更新时间:2023-11-03 21:30:24 26 4
gpt4 key购买 nike

我目前正在寻找使用 python 实现一个基本的流量采样器,我想知道如何有效地实现每次捕获之间的采样器间隔。我没有使用 sFlow,因为我想对我的 NIC 上的流量进行采样。

我看过 scapy 但似乎它不提供采样功能。因此,在嗅探附加的处理函数中(例如 sniff(prn=XXX) )我应该自己实现一个计时器来检查是否应该专门处理数据包?

否则,我有一个想法,使用以下代码(基本示例):

#Packet sniffer in python
#For Linux

import socket

#create an INET, raw socket
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)

# receive a packet
while True:
sleep(1) # Timer ?
print s.recvfrom(65565)

我也查看了套接字创建,但没有找到任何合适的答案。

我的问题是,在网络接口(interface)上捕获和采样流量的最有效、性能最明智的方法是什么?

最佳答案

首先,如果您要设置延迟/计时器,则需要导入时间,或者如果您仅使用sleep(n)来执行从时间导休眠眠。其次,我个人认为计时器并不是嗅探数据包的最佳选择。特别是当您正在过滤/查找某些类型的数据包时。此外,要获取原始数据包的任何相关详细信息,您需要对其进行解构。 python 中的 struct 模块可能最适合此目的,您需要知道如何从某些接收到的数据包中提取数据。当使用 s.recvfrom(65535) 接收数据包数据时,它存储在一个元组中,您需要使用以下内容关注它的第一个元素:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
while True:
try:
packet = s.recvfrom(65565)
packet = packet[0]
#begin to analyse and deconstruct packet data
except:
pass

每个数据包的构造方式都可以让您从每个数据包中提取有用的信息。对它们的包装方式进行简单搜索可以帮助您了解如何解构它们并显示信息。查看 struct 模块,这会让您大吃一惊!如果由于某种原因您确实需要延迟,我会使用最大值 sleep(0.5)

为了提高效率,您可能需要实现线程。如果您的代码工作正常,则不一定需要这样做,但如果您愿意,您可以启动一个线程来解构收到的数据包,同时您的网卡仍在接收数据包。它看起来像这样:

import socket
import thread

def deconstructPacket(packet):
#code to deconstruct packet

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_TCP)
while True:
try:
packet = s.recvfrom(65565)
packet = packet[0]
thread.start_new_thread(deconstructPacket, packet)
except:
pass #or handle any errors

我希望这有帮助!!!

关于python - 在 python/scapy 中采样流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com