不使用libpcap我试图写一个符合pcap文件格式(格式)的日志文件.WireShark需要读取此文件.到目前为止,我用C++编写了这个:
struct pcapFileHeader {
uint32_t magic_number; /* magic number */
uint16_t version_major; /* major version number */
uint16_t version_minor; /* minor version number */
int16_t thiszone; /* GMT to local correction */
uint32_t sigfigs; /* accuracy of timestamps */
uint32_t snaplen; /* max length of captured packets, in octets */
uint32_t network; /* data link type */
};
ofstream fileout;
fileout.open("file.pcap", ios::trunc);
pcapFileHeader fileHeader;
fileHeader.magic_number = 0xa1b2c3d4;
fileHeader.version_major = 2;
fileHeader.version_minor = 4;
fileHeader.thiszone = 0;
fileHeader.sigfigs = …Run Code Online (Sandbox Code Playgroud) 对pcap文件运行file命令将打印出以下内容:
$ file pcap.pcap
pcap.pcap: tcpdump capture file (little-endian) - version 2.4 ....
Run Code Online (Sandbox Code Playgroud)
我一直在寻找一种方法来创建一个big-endian捕获文件,或者在线下载一个样本,但无济于事.
我也很困惑pcap中究竟是小端还是大端.据我所知,libpcap捕获了它在线上看到的内容.
我想计算从发送数据包到恢复ACK之间的时间差.我没有在数据包中看到任何与时间戳相关的信息,任何人都可以给我任何关于如何计算差异的指示.
我有一个非常大的pcap文件,我期待创建一个脚本给我(除了wireshark给我的属性),有效负载和数据包的入站/出站比例.
我想在下面使用这样的东西,但我不确定是否有更有效的方法来做到这一点?:
from scapy.all import *
data = "Eavesdrop_Data.pcap"
a = rdpcap(data)
os.system("tshark -T fields -e _ws.col.Info -e http -e frame.time -e"
"data.data -w Eavesdrop_Data.pcap > Eavesdrop_Data.txt -c 1000")
os.system("tshark -r Eavesdrop_Data.pcap -Y Eavesdrop_Data_http.pcap")
sessions = a.sessions()
i = 1
for session in sessions:
http_payload = ""
for packet in sessions[session]:
print packet
Run Code Online (Sandbox Code Playgroud) 为了使用 pcap 从多个接口嗅探,我将执行以下操作(在伪代码中):
foreach interface:
open a file descriptor using pcap_open_live()
set the file descriptor to non-blocking
while true:
check for a ready file descriptor using select() or an equivalent I/O multiplexer
read data from every ready file descriptor using pcap_dispatch()
handle EndOfStream or Errors and break out of loop if needed
Run Code Online (Sandbox Code Playgroud)
这是否足够或者是否有一些特别的注意事项需要考虑?
我最近使用DARPA网络流量包及其在KDD99中用于入侵检测评估的派生版本.
请原谅我在计算机网络领域的有限领域知识,我只能从DARPA数据包头中获得9个功能.而不是KDD99中使用的41个功能.
我打算继续我在UNB ISCX入侵检测评估数据集上的工作.但是,我想从pcap文件中获取KDD99中使用的41个功能并将其保存为CSV格式.有没有快速/简单的方法来实现这一目标?
因为之前已经为KDD99做过,有没有可以为我做这个的库或转换器?如果没有,是否有如何从pcap文件派生这些功能的指南?
// Open the ethernet adapter
handle = pcap_open_live("eth0", 65356, 1, 0, errbuf);
// Make sure it opens correctly
if(handle == NULL)
{
printf("Couldn't open device : %s\n", errbuf);
exit(1);
}
// Compile filter
if(pcap_compile(handle, &bpf, "udp", 0, PCAP_NETMASK_UNKNOWN))
{
printf("pcap_compile(): %s\n", pcap_geterr(handle));
exit(1);
}
// Set Filter
if(pcap_setfilter(handle, &bpf) < 0)
{
printf("pcap_setfilter(): %s\n", pcap_geterr(handle));
exit(1);
}
// Set signals
signal(SIGINT, bailout);
signal(SIGTERM, bailout);
signal(SIGQUIT, bailout);
// Setup callback to process the packet
pcap_loop(handle, -1, process_packet, NULL);
Run Code Online (Sandbox Code Playgroud)
process_packet函数摆脱了标题并对数据进行了一些处理.然而,当它花了太长时间,我认为它正在丢弃数据包.
我如何使用pcap监听udp数据包,并能够在不丢失数据包的情况下对数据进行一些处理?
我正在尝试安装pypcap:https://github.com/dugsong/pypcap/blob/master/INSTALL#L75
我正在尝试在Windows 10 - 64位和python 2.7.11 64位上安装它.我下载了源代码并将其移至c:\pypcap.下载pyrex并安装它.它把wpdpack文件放在c:\wpdpack安装页面中说.创建配置文件并更改了makefile.
我还在mingw他们的网站上安装了基本软件包和g++软件包.
我尝试做:
C:\pypcap> set PATH=%PATH%;c:\MinGW\bin;c:\Python27
C:\pypcap> mingw32-make
Run Code Online (Sandbox Code Playgroud)
它失败了,它得到以下错误:
In file included from C:\Python27\include/Python.h:8:0,
from pcap.c:4:
C:\Python27\include/pyconfig.h:68:16: fatal error: io.h: No such file or directory
#include <io.h>
Run Code Online (Sandbox Code Playgroud)
所以我没有这个io.h文件.我该怎么做才能编译和使用pypcap?
在尝试之前我尝试过
C:\pypcap>pip install pypcap
Collecting pypcap
Using cached pypcap-1.1.4.tar.gz
Complete output from command python setup.py egg_info:
pcap.h not found
----------------------------------------
Command "python setup.py egg_info" failed with error …Run Code Online (Sandbox Code Playgroud) 我想使用python/scapy迭代一个pcap文件包.该文件有多个协议.当前迭代是特定于协议的,因此如果下一个数据包来自另一个协议,则迭代会"跳转".我不知道为什么现在这样.无论协议是什么,我都想要数据包.
小例子:
data = 'new.pcap'
zz = rdpcap(data)
sessions = zz.sessions()
for session in sessions:
for packet in sessions[session]:
eth_src = packet[Ether].src
eth_type = packet[Ether].type
if eth_src == "00:22:97:04:06:b9" and eth_type == 0x8100:
# do anything
elif eth_src == "00:22:97:04:06:b9" and eth_type == 0x22f0:
# do anything
else:
# do anything
Run Code Online (Sandbox Code Playgroud)
有谁知道原因?
我有一组pcap包含来自两台主机的 UDP 流量的文件,并且必须定期对此流量执行一些分析。
理想情况下,我希望避免频繁设置具有特定 IP 的本地接口等来重播这些文件。我希望能够简单地在我的环回接口上重播它们,使用tcprewrite更改pcap.
这是它目前的样子:
# Remove mac addresses for loopback interface
# Remove VLAN tags
tcprewrite \
--enet-smac=00:00:00:00:00:00 \
--enet-dmac=00:00:00:00:00:00 \
--enet-vlan=del \
--infile="${INFILE}" \
--outfile="${OUTFILE}.tmp"
# Change source and destination IP to loopback
# Regenerate IP checksums
tcprewrite \
--srcipmap=0.0.0.0/0:127.0.0.1 \
--dstipmap=0.0.0.0/0:127.0.0.1 \
--fixcsum \
--infile="${OUTFILE}.tmp" \
--outfile="${OUTFILE}"
Run Code Online (Sandbox Code Playgroud)
看起来差不多可以工作了。然后我可以简单地使用我的环回重播这些文件,tcpreplay并且我看到数据包使用tcpdumpon lo。尽管如此,似乎任何常规用户空间套接字都看不到环回上的此流量。
据我了解,这似乎与Linux上环回接口处理第2层的方式有关。看来我需要将第 2 层标头 (DLT) 从普通协议重写ethernet为nullBSD 环回使用的协议。
任何有将以太网上捕获的 UDP 流量重放到环回接口的经验的人将不胜感激。pcap我不知道如何使用/来实现这一点,或者是否可行 …