summaryrefslogtreecommitdiff
path: root/read_pcap.py
diff options
context:
space:
mode:
Diffstat (limited to 'read_pcap.py')
-rw-r--r--read_pcap.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/read_pcap.py b/read_pcap.py
new file mode 100644
index 0000000..0446cb9
--- /dev/null
+++ b/read_pcap.py
@@ -0,0 +1,49 @@
+import os
+from scapy.all import *
+from scapy.layers.inet import IP
+
+class ReadPcap():
+ def __init__(self, path_dict):
+ self.traffic_playback_workpath = path_dict["traffic_playback_workpath"]
+ self.pcap_path = os.path.join(self.traffic_playback_workpath, "traffic_pcap")
+
+ def get_info(self, file_name):
+ """
+ 获取数据包 包数、字节数统计信息
+ :param file_name:
+ :return:
+ """
+ # 字节和包数统计变量
+ pcap_info_dict = {
+ "total_packets" : 0,
+ "total_packets_sent": 0,
+ "total_packets_received": 0,
+ "total_bytes": 0,
+ "total_bytes_sent": 0,
+ "total_bytes_received": 0,
+ "total_syn_pkt": 1
+ }
+ file_abspath = os.path.join(self.pcap_path, file_name)
+ packets = rdpcap(file_abspath)
+ # 定义第一个包方向
+ src_ip = packets[0]["IP"].src
+ dst_ip = packets[0]["IP"].dst
+ # 计算包数和字节数
+ for pkt in packets:
+ ip_layer: IP = pkt["IP"]
+ pkt_length = len(pkt)
+ if pkt_length < 60: # 数据包长度小于60,按60计算
+ pkt_length = 60
+ # 根据方向判断字节数和包数
+ if ip_layer.src == src_ip:
+ pcap_info_dict["total_packets"] += 1
+ pcap_info_dict["total_packets_sent"] += 1
+ pcap_info_dict["total_bytes"] += pkt_length
+ pcap_info_dict["total_bytes_sent"] += pkt_length
+ else:
+ pcap_info_dict["total_packets"] += 1
+ pcap_info_dict["total_packets_received"] += 1
+ pcap_info_dict["total_bytes"] += pkt_length
+ pcap_info_dict["total_bytes_received"] += pkt_length
+ print(pcap_info_dict)
+ return pcap_info_dict \ No newline at end of file