标签: pcap

如何使用 python 在 ubuntu 中安装 pcap

这是我的代码:

\n\n
import pcap ,struct\n\npack=pcap.pcap()\npack.setfilter(\'udp\')\nkey=\'\'\nfor recv_time,recv_data in pack:\n   recv_len=len(recv_data)\n   if recv_len == 102 and recv_data[42]== chr(02) and recv_data[101] == chr(03):\n      print struct.unpack(\'>I\',recv_data[49:53])[0]\n      print \'\xe7\x99\xbb\xe9\x99\x86\xe4\xba\x86\'\n   elif recv_len == 55:\n      print struct.unpack(\'>I\',recv_data[49:53])[0]\n      print \'\xe7\x99\xbb\xe9\x99\x86\xe4\xba\x86\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

我用它来安装 pcap : sudo apt-get install python-libpcap,它安装了,

\n\n

但是当我运行代码时,它显示错误:

\n\n
Traceback (most recent call last):\n  File "weapon.py", line 2, in <module>\n    import pcap ,struct\nImportError: No module named pcap\n
Run Code Online (Sandbox Code Playgroud)\n\n

我能做些什么 ,

\n\n

谢谢

\n

python ubuntu pcap

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

如何用c ++读取pcap文件来获取数据包信息?

我想用c ++写一个程序来读取一个pcap文件并获取数据包的信息,比如len,sourc ip,flags等等.现在我找到了下面的代码,我想它会帮助我获取信息,但是我有一些问题:首先我想知道我应该在程序中添加哪个库,之后是什么是pcap_next,如何从pcap文件中获取句柄?

/* Grab a packet */
packet = pcap_next(handle, &header);
if (packet == NULL) {   /* End of file */
    break;
}
printf ("Got a packet with length of [%d] \n",
        header.len);
Run Code Online (Sandbox Code Playgroud)

c++ pcap

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

使用用于 Radius 协议的 TcpDump 命令捕获 pcap 文件

我正在尝试使用以下命令捕获 pcap 文件。

tcpdump -c 25 -i eth0.

我想专门为 Radius 协议捕获数据包。我试过

tcpdump -c 25 -i etho radius,它给出了语法错误。

radius pcap

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

获取 PCAP 文件中的所有 ip

我有一组 PCAP 文件,我需要检索所有 ip。我找到了这个链接,目前一直在使用这个命令。

tshark_path + " -r " + infile + " -T fields -e ip.dst | sort | uniq
Run Code Online (Sandbox Code Playgroud)

问题是,这似乎是很慢,还时不时返回的东西,看起来像这样:128.219.232.12,10.78.0.131。我的问题是是否有更好的方法来做到这一点,它可以运行得更快、更准确。

同样值得注意的是,我的代码是在 python 中的。

python pcap wireshark tshark

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

使用 Python 修改 PCAP

我需要读取 PCAP 文件,修改一些字段(实际上是 IPv4 源和目标以及以太网源和目标)。PCAP 经过预过滤,仅包含以太网上的 IPv4 数据包。

到目前为止,我尝试使用 scapy 来执行此操作,但它存在严重的内存问题。当读取 ~350MB PCAP 文件时,我的 16GB RAM 已完全填满。其实只是读书而已。我还没有对该文件执行任何其他操作。我也找到了这个答案,并且通过这些更改,阅读速度非常快。一旦我开始修改数据包,内存就会再次膨胀。Scapy 实际上在这种情况下不可用

我也考虑过使用其他工具,例如 tcprewrite,但它不能满足我的目的。每个数据包的源 MAC 始终相同,这也可以使用 tcprewrite 来完成。源IP在给定的子网范围内应该是随机的,例如均匀分布在10.0.0.0/16中。不太容易。更复杂的是目标IP,需要根据给定的流量矩阵计算出来。

所以问题是:如何读取 PCAP 文件,使用自定义函数修改四个基本字段(以太网 src+dst、IP src+dst),并将其写回(另一个)PCAP 文件?

实际上,我的框架的其余部分是用Python编写的,所以我更喜欢基于Python的解决方案。但是,由于我可以简单地调用其他脚本,因此这不是强制性的。谢谢你!

python pcap

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

为什么pcap_next_ex的第三个参数是不兼容的指针类型?

免责声明:这是一个家庭作业,但问题不在于作业,只是一般语法怪异.

我试图在一个更大的程序的上下文中使用libpcap,但是当我尝试获取每个数据包的数据包头和数据时,gcc抱怨pcap_next_ex的第三个参数是一个不兼容的指针类型.这是一些示例代码,看看我在说什么:

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

int main()
{
    pcap_t *pcap;
    char pcapErr[PCAP_ERRBUF_SIZE];
    struct pcap_pkthdr *pktHeader;
    u_char *pktData;

    pcap = pcap_open_offline("somefile.pcap", pcapErr);
    if (pcap == NULL)
    {
        fprintf(stderr, "pcap_open_offline failed: %s\n", pcapErr);
        exit(EXIT_FAILURE);
    }

    while (pcap_next_ex(pcap, &pktHeader, &pktData) == 1)
    {
        // do things here
    }

    pcap_close(pcap);

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

手册页指出pcap_next_ex()的原型是:

int pcap_next_ex(pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data)
Run Code Online (Sandbox Code Playgroud)

我传递的是一种不兼容的指针类型到底是怎么回事?谢谢.

c pointers pcap

0
推荐指数
1
解决办法
1928
查看次数

链接新版本的libpcap库

我想在CentOS 5.5机器上安装和使用libpcap的最新版本(1.1.1).我通过以下方式配置,编译和安装了新的libpcap库:

[dima@localhost libpcap-1.1.1]$ ./configure
[dima@localhost libpcap-1.1.1]$ make
[dima@localhost libpcap-1.1.1]$ sudo make install
Run Code Online (Sandbox Code Playgroud)

但是当我尝试链接libpcap共享库(使用-lpcap链接器标志)时,我的应用程序链接到旧版本的libpcap库(使用pcap_lib_version()API调用验证).

我需要做什么才能链接到新的libpcap库?

提前致谢

linux linker shared-libraries pcap libpcap

0
推荐指数
1
解决办法
4848
查看次数

使用python创建一个pcap文件

我正在尝试创建一个非常简单的PCAP文件(1条UDP消息)。
使用dpkt(pcap.Writer)尝试过,没有运气,而且文档很少。
任何人都可以发表工作示例吗?
(或其他任何替代方法-我不受dpkt的约束)

python pcap

0
推荐指数
1
解决办法
4994
查看次数

运行一个简单的libpcap示例时出错

我正在尝试编译一个简单的libpcap示例,

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

int main(int argc, char *argv[])
{
  char *dev;
  char errbuf[PCAP_ERRBUF_SIZE];
  struct bpf_program fp;

  char filter_exp[] = "port 23";
  bpf_u_int32 mask;
  bpf_u_int32 net;
  dev = pcap_lookupdev(errbuf);
  if (dev == NULL )
  {
    fprintf(stderr, "couldn't find default device: %s\n", errbuf);
    return (2);
  }
  printf("Device: %s\n", dev);

  //LOOKUP NETMASK and IP
  if (pcap_lookupnet(dev, &net, &mask, errbuf) == -1)
  {
    fprintf(stderr, "can't get netmask for device %s\n", dev);
    net = 0;
    mask = 0;
  }

  printf("lookup\n");

  pcap_t *handle;
  printf("handle defined\n");
  handle …
Run Code Online (Sandbox Code Playgroud)

c network-programming tcpdump pcap libpcap

0
推荐指数
1
解决办法
463
查看次数

如何从头开始编写pcap文件,修饰libpcap函数?

我有这段代码,可以很好地用libpcap编写一个pcap文件(仅用于测试的以太网协议):

struct ethernet {
  u_char        mac1[6];
  u_char        mac2[6];
  u_short       protocol;
};

int main() {
  pcap_t *pd;
  pcap_dumper_t *pdumper;

  pd = pcap_open_dead(DLT_EN10MB, 65535);
  pdumper = pcap_dump_open(pd, "test.pcap");

  struct pcap_pkthdr packet_header;
  struct timeval ts;

  packet_header.ts = ts;
  packet_header.caplen = sizeof(struct ethernet);
  packet_header.len = sizeof(struct ethernet);

  struct ethernet ethernet;

  bzero(ethernet.mac1, 6);
  bzero(ethernet.mac2, 6);
  ethernet.protocol = 8977; // randomly choose
  pcap_dump((u_char*)pdumper, &packet_header, (const u_char*)&ethernet);
  pcap_close(pd);
  pcap_dump_close(pdumper);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是我想尝试不使用pcap函数,所以我开始修饰上面使用的函数。

这是我发现的来源:

pcap_open_dead函数:http ://www.wand.net.nz/trac/libtrace/browser/lib/pcap_open_dead.c?rev=808a478a2459f3cf0e8bf927fcaad371138efb20

pcap_dump_open,pcap_dump等:http : //www.opensource.apple.com/source/libpcap/libpcap-2.1/libpcap/savefile.c

所以,这是我的想法:

pcap_open_dead函数是无用的,只是实例化一个pcap_t结构(我不想在我的代码中使用)并用参数填充其值。

pcap_dump_open返回一个pcap_dumper_t(似乎就像一个FILE *),只是打开文件并在其中写入标题(如果我们不关心错误处理的话)。顺便说一句,似乎它给sf_write_header提供了“ p-> tzoff”作为参数,该参数尚未在我的代码中初始化(并且仍在工作)。关于链接类型,在我们的例子中,它等于1。 …

c pcap libpcap

0
推荐指数
1
解决办法
3545
查看次数