标签: pcap

创建一个pcap文件

我需要将UDP数据包保存到文件中,并希望使用pcap格式重用各种可用工具(wireshark,tcpdump,...).这个帖子中有一些信息,但我找不到如何编写全局文件头'struct pcap_file_header'.

pcap_t* pd = pcap_open_dead(DLT_RAW, 65535);
pcap_dumper_t* pdumper = pcap_dump_open(pd, filename);

struct pcap_file_header file_hdr;
file_hdr.magic_number = 0xa1b2c3d4;
file_hdr.version_major = 2;
file_hdr.version_minor = 4;
file_hdr.thiszone = 0;
file_hdr.sigfigs = 0;
file_hdr.snaplen = 65535;
file_hdr.linktype = 1;

// How do I write file_hdr to m_pdumper?

while( (len = recvmsg(sd, &msg_hdr, 0)) > 0 )
  pcap_dump((u_char*)m_pdumper, &m_pcap_pkthdr, (const u_char*)&data);
Run Code Online (Sandbox Code Playgroud)

我该如何编写全局文件头?如果没有可用的特定pcap函数,如何检索文件描述符以使用write()插入标头?

c linux udp pcap libpcap

5
推荐指数
1
解决办法
2万
查看次数

pcap_set_buffer_size中的问题

#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>

#define BUFFER_SIZE 65535

char errbuf[PCAP_ERRBUF_SIZE];

int main(int argc, char **argv)
{
    int d;
    pcap_if_t *alldevsp;
    pcap_t *pkt_handle;

    if((pcap_findalldevs(&alldevsp,errbuf))==-1)
    {
        printf("findalldevices: %s\n",errbuf);
        exit(1);
    }
    printf("Availabel network devices are\n");
    pcap_if_t *temp = alldevsp;
    while((temp)!=NULL)
    {
        printf("%s: %s\n",(temp)->name,(temp)->description);
        (temp)=(temp)->next;
    }
    pcap_freealldevs(alldevsp);

    pkt_handle = pcap_create("wlan1",errbuf);
    if(pkt_handle==NULL)
    {
        printf("create: %s\n",errbuf);
        exit(1);
    }


    if((pcap_set_rfmon(pkt_handle, 1))!=0)
    {
        printf("Monitor mode could not be set\n");
        exit(1);
    }

    if((pcap_set_buffer_size(pkt_handle, BUFFER_SIZE))!=0)
        {
        printf("ERROR\n");
        exit(1);
    }

    if((d=(pcap_activate(pkt_handle)))!=0)
    {
        if(d==PCAP_ERROR_RFMON_NOTSUP)
            printf("%d : PCAP_ERROR_RFMON_NOTSUP\n",d);
        if(d==PCAP_WARNING)
            printf("%d : PCAP_WARNING\n",d); …
Run Code Online (Sandbox Code Playgroud)

c linux pcap libpcap

5
推荐指数
1
解决办法
8070
查看次数

如何从DARPA pcap文件中获取KDD99功能?

我最近使用DARPA网络流量包及其在KDD99中用于入侵检测评估的派生版本.

请原谅我在计算机网络领域的有限领域知识,我只能从DARPA数据包头中获得9个功能.而不是KDD99中使用的41个功能.

我打算继续我在UNB ISCX入侵检测评估数据集上的工作.但是,我想从pcap文件中获取KDD99中使用的41个功能并将其保存为CSV格式.有没有快速/简单的方法来实现这一目标?

因为之前已经为KDD99做过,有没有可以为我做这个的库或转换器?如果没有,是否有如何从pcap文件派生这些功能的指南?

machine-learning pcap intrusion-detection

5
推荐指数
1
解决办法
5325
查看次数

Pcap Dropping Packets

// 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数据包,并能够在不丢失数据包的情况下对数据进行一些处理?

networking udp packet pcap libpcap

5
推荐指数
1
解决办法
4266
查看次数

从scapy中获取PCAP文件中的IP地址

是否有一种智能,快速的方法从PCAP文件中获取所有IP地址?我只需要(目标地址,源地址)元组.

目前我正在使用Scapy的rdpcap功能:

from scapy.all import *
pcap = rdpcap('file.pcap')

ips = set([(p[IP].fields['src'], p[IP].fields['dst']) for p in pcap if p.haslayer(IP) == 1])
Run Code Online (Sandbox Code Playgroud)

但是我的机器需要大约两分钟来解析一个70MB的PCAP文件,其中包含370个独特的提取条目......

optimization scapy pcap

5
推荐指数
1
解决办法
6779
查看次数

在Windows 10 python 2.7(64位)上安装pypcap

我正在尝试安装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 pcap

5
推荐指数
2
解决办法
8221
查看次数

将pcap文件连续输送到tshark/wireshark

我有连续生成的pcap文件给我.它想要不断地将它们送到"永远在线"的tshark/wireshark.这是我尝试过的(OSX)

mkfifo tsharkin
tail -f -c +0 tsharkin | tshark -l -i - > tsharkout 2>stderr &
cat file1.pcap > tsharkin
Run Code Online (Sandbox Code Playgroud)

以上工作正常,我从tsharkout中的file1.pcap得到预期的输出

cat file2.pcap > tsharkin
Run Code Online (Sandbox Code Playgroud)

以上不起作用,我在tsharkout中什么都没得到,但是我在stderr中得到"1包丢弃"+"3包捕获"

cat file2.pcap > tsharkin
Run Code Online (Sandbox Code Playgroud)

再次尝试使tail/tshark进程停止/崩溃

我尝试再次这样做,但这次先使用file2.pcap然后再使用file1.pcap.这次file2.pcap处理得很好,file1.pcap使tail/tshark进程停止/崩溃.因此,我将得出结论,两个pcap文件没有任何问题,但似乎tshark不喜欢抛出多个pcap文件.

为了测试它,我尝试首先使用mergecap合并file1.pcap和file2.pcap,然后将其输入到tshark

mergecap -F pcap -w file1_2.pcap file1.pcap file2.pcap
cat file1_2.pcap > tsharkin
Run Code Online (Sandbox Code Playgroud)

这工作正常,我得到tsharkout中file1.pcap和file2.pcap的预期输出

问题是我的pcap文件一路走来,所以我不能在将它们全部合并到tshark之​​前.我需要能够在pcap文件到达时将其提供给"永远运行"的tshark.我怎样才能做到这一点?

sniffing pcap wireshark tshark

5
推荐指数
1
解决办法
597
查看次数

使用python/scapy迭代pcap文件包

我想使用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)

有谁知道原因?

scapy pcap python-2.7

5
推荐指数
1
解决办法
3193
查看次数

使用 scapy 在 PCAP 中查找 tcp 数据包的答案

我用 scapy python 解析 pcap 文件,并且该 pcap 中有 TCP 数据包,我想知道这个 pcaket 的答案是什么,我该怎么做?

例如:客户端和服务器 TCP 流

客户端->服务器:“嗨” 服务器->客户端:“你好吗”

当我收到“hi”数据包(使用 scapy)时,我怎样才能得到“你好吗”?

python tcp scapy pcap

5
推荐指数
1
解决办法
970
查看次数

在环回上重放 pcap

我有一组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) 从普通协议重写ethernetnullBSD 环回使用的协议。

任何有将以太网上捕获的 UDP 流量重放到环回接口的经验的人将不胜感激。pcap我不知道如何使用/来实现这一点,或者是否可行 …

loopback tcpdump pcap tcpreplay

5
推荐指数
0
解决办法
1017
查看次数