用tshark抓取到的数据 怎么根据应用层协议进行过滤?
我的命令是tshark -i ens33 -s 65535 -w -
我现在需要对ftp和rtp协议的数据进行过滤 不捕获这两个协议的数据。tshark有一个参数-Y 可以根据这个过滤 但是-Y 和0-w不能同时用。
-2 -R参数又提示我的命令是single-pass 用不了
该怎么办呢?参数这里有方法过滤吗?
或者在抓取到数据后 根据什么对数据进行分析可以提取并过滤掉这两个协议的数据呢?
我现在有一个tcpdump分析数据的方法 我使用可以基于提取出来的包中的信息 来识别出应用层协议?如果可以的话 用什么方法?
def producer(q):
try:
tcpdump_process = subprocess.Popen(
["tcpdump", "-i", str(wangkaname), "-U", "-s", "65535", "-w", "-"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
try:
pcap_header = tcpdump_process.stdout.read(24)
if pcap_header[:4] == b"\xa1\xb2\xc3\xd4": # big-endian
typeI = "!I"
typeH = "!H"
elif pcap_header[:4] == b"\xd4\xc3\xb2\xa1": # little-endian
typeI = "I"
typeH = "H"
else:
raise ValueError("Unknown pcap file format")
reader = PacketReader("../dataset/realdiswangka.csv")
while True:
try:
packet_header = tcpdump_process.stdout.read(16)
if not packet_header:
if tcpdump_process.poll() is not None:
break
continue
timeHigh = struct.unpack(typeI, packet_header[0:4])[0]
timeLow = struct.unpack(typeI, packet_header[4:8])[0]
timeStamp = 1000000 * timeHigh + timeLow
ts_sec, ts_usec, incl_len, orig_len = struct.unpack(
typeI + typeI + typeI + typeI, packet_header
)
** ** packet_data = tcpdump_process.stdout.read(incl_len)__**__** //我现在有一个tcpdump分析数据的方法 我使用可以基于提取出来的包中的信息 来识别出应用层协议?如果可以的话 用什么方法?
basicPacket = reader.get_ipv4_info(packet_data, timeStamp)
if basicPacket:
q.put(basicPacket)
except Exception as e:
print(f"发生了未知的错误: {e}")
except Exception as e:
print(f"发生了未知的错误: {e}")
finally:
tcpdump_process.terminate()
tcpdump_process.wait()
except Exception as e:
print(f"发生了未知的错误: {e}")