标签: libpcap

在libpcap pcap_loop()回调中传递参数

因为我想使用libpcap和一个小型C程序进行一些测试,所以我试图将结构从main()传递给got_packet()。阅读libpcap教程后,我发现了这一点:

pcap_loop()的原型如下:

int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
Run Code Online (Sandbox Code Playgroud)

最后一个参数在某些应用程序中很有用,但是很多时候只是将其设置为NULL。假设除了pcap_loop()发送的参数外,我们还有自己希望发送给回调函数的参数。这就是我们要做的。显然,您必须强制转换为u_char指针,以确保结果正确到达该指针。稍后我们将看到,pcap利用一些非常有趣的方式以u_char指针的形式传递信息。

因此,据此,可以使用pcap_loop()的参数编号4在got_packet()中发送结构。但是尝试之后,我得到了一个错误。

这是我的(错误的)代码:

int main(int argc, char **argv)
{
 /* some line of code, not important */

 /* def. of the structure: */
 typedef struct _configuration Configuration;
 struct _configuration {
   int id;
   char title[255];
 };

 /* init. of the structure: */
 Configuration conf[2] = {
   {0, "foo"},
   {1, "bar"}};

 /* use pcap_loop with got_packet callback: */
 pcap_loop(handle, num_packets, got_packet, &conf);
}

void got_packet(u_char *args, const struct pcap_pkthdr …
Run Code Online (Sandbox Code Playgroud)

c libpcap

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

使用libpcap一次监听两个设备

我试图用libpcap监听两个设备,但我仍然无法找到如何做到这一点.我试图将设备设置为"任何"但它不起作用.我正在尝试编写dhcp中继代理,所以我需要监听eth0和eth1.

我试图创建两个pcap_loops,每个都有不同的设备和处理程序,但只有第一个pcap_loop工作,第二个被忽略.

有什么方法可以做到这一点,还是应该离开libpcap并尝试使用原始套接字?

c network-programming pcap libpcap

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

在Python中使用URL嗅探

有谁知道如何在Python中编写实时数据嗅探器,它提取原始IP地址和正在访问的完整URL?我已经考虑过从urlsnarf中提取数据,但是不支持IPv6(并且连接将是IPv6主机).

虽然我可以从tcpdump和greping GET/POST中提取数据,这会让我只使用网络服务器上的路径,但我不会获得相关的FQDN.遗憾的是,由于环境的配置,使用带有IPv6 TPROXY的SQUID不是一种选择.

有没有人对如何使用libpcap的Python绑定有任何想法?非常感谢你的帮助:)

谢谢 :)

python url sniffing ipv6 libpcap

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

Android上的jNetPcap:findAllDevs方法的问题!

我已经成功地将jNetPcap编译为Android的共享库.我使用以下代码创建了一个简单的应用程序:http://jnetpcap.com/examples/classic来测试API.

问题是当我调用方法findAllDevs并引发异常时出现以下消息:"无法读取设备列表,错误发布:拒绝权限"

我无法理解原因,因为我已经在我的程序的第一部分进行了调用,以获得我的应用程序的root权限,并将我的应用程序测试到root电话.当我运行应用程序时,会弹出一条弹出窗口,显示以下消息:"SnifferApp已被授予超级用户权限",然后发生异常.

有任何想法吗?

这是我的一段代码:

Process p = Runtime.getRuntime().exec("su");
/*try {
    Thread.sleep(10000);
} catch (InterruptedException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
} // do nothing for 1000 miliseconds (1 second)
*/
try {
        System.loadLibrary(JNETPCAP_LIBRARY_NAME);
}
catch (UnsatisfiedLinkError e) {
    System.out.println("Native code library failed to load.\n" + e);
}

 /***************************************************************************
 * First get a list of devices on this system
 **************************************************************************/ 
 int r = Pcap.findAllDevs(alldevs, errbuf);
 r = Pcap.findAllDevs(alldevs, errbuf);
 if (r == Pcap.NOT_OK || …
Run Code Online (Sandbox Code Playgroud)

android exception device sniffer libpcap

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

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
查看次数

TCP序列号到达时发生的情况与预期不符?

我正在编写一个程序,它使用libpcap来捕获数据包并重新组装TCP流.我的程序只是监控流量,所以我无法控制数据包的接收和传输.我的程序忽略所有非TCP/IP流量.

我从ISN计算下一个预期的序列号,然后计算连续的SEQ号.我进行了设置,以便每个TCP连接由一个由源IP,源端口,dest IP和dest端口组成的元组唯一标识.一切都顺利进行,直到我收到一个序列号不同于我所期望的数据包.我上传了屏幕截图,以帮助说明我在这里描述的内容.

我的问题是:1."丢失"数据包中的数据在哪里?2. SEQ数字顺序如何从这种情况中恢复?3.我该怎么做才能处理这些事件.

请记住; 但是,我不是在编写一个遵循TCP的程序.我正在编写一个程序,被动地监视TCP流的网络流量并尝试将原始数据保存到磁盘,我很困惑为什么上面的状态发生以及如何编程来处理它.

谢谢

c tcp packet-capture libpcap

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

使用root权限部署应用程序

我编写了一个Cocoa应用程序,它使用libpcap来监控网络流量.由于libpcap需要root权限,我想知道赋予root权限的最佳方法是什么(例如使用Package Maker?).我可以使用拖放式安装程序部署它,还是我的唯一选择?

此外,我想知道给予我的应用程序root权限所带来的安全风险.该应用程序还写入磁盘(sqlite数据库),我读到,给一个写入磁盘根权限的应用程序不是一个好主意.

permissions macos cocoa objective-c libpcap

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

如何使用libpcap解析以太网数据包?

我在C++中使用libpcap来读取pcap文件中的数据包,例如:

rc = pcap_next_ex((pcap_t*)handle, &header, (const unsigned char**)packet);
Run Code Online (Sandbox Code Playgroud)

我想解析数据包标头(没有有效负载).

例如,如何解析给定的数据包以提取其源和目的地IP地址?

谢谢

c++ parsing packet libpcap

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

替代pcap(Linux)

在Linux路由器上,我编写了一个C程序,它使用pcap来获取IP头和数据包的长度.通过这种方式,我可以收集统计数据并根据IP测量带宽.很简约.:-)

现在流量和用户数量都在增长,旧程序开始变得困难.也就是说,路由器很难应对大量的数据包.在"黄金时段"总共超过50000个包.

该程序本身已经过优化.我不想炫耀,但我相信它能够得到它的好处.它读取IP头和数据包长度.然后它将IP转换为索引(只是一个简单的减法),并将数据包的长度存储(累积)在一个数组中.它偶尔(实际上是一个SIGALRM)将数组存储在MySQL数据库中.

我的问题是:有没有其他方法可以利用以太网设备来获得比pcap"更便宜"的比特流?

我当然可以修改以太网驱动程序以包含单个IP统计信息收集,但这似乎有点矫枉过正.

基本上我的程序是繁忙的eth0上的'tcpdump',最终会杀死我的路由器.

linux statistics pcap libpcap

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

在Windows上使用nodejs捕获数据包

node.js v0.8.0,XP/WIN7(不是Cygwin)

谷歌找到node_pcap(https://github.com/mranney/node_pcap)

但它只支持osx和linux.

是否有任何Windows模块?

谢谢.

.

winpcap pcap libpcap node.js

4
推荐指数
2
解决办法
7289
查看次数