因为我想使用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) 我试图用libpcap监听两个设备,但我仍然无法找到如何做到这一点.我试图将设备设置为"任何"但它不起作用.我正在尝试编写dhcp中继代理,所以我需要监听eth0和eth1.
我试图创建两个pcap_loops,每个都有不同的设备和处理程序,但只有第一个pcap_loop工作,第二个被忽略.
有什么方法可以做到这一点,还是应该离开libpcap并尝试使用原始套接字?
有谁知道如何在Python中编写实时数据嗅探器,它提取原始IP地址和正在访问的完整URL?我已经考虑过从urlsnarf中提取数据,但是不支持IPv6(并且连接将是IPv6主机).
虽然我可以从tcpdump和greping GET/POST中提取数据,这会让我只使用网络服务器上的路径,但我不会获得相关的FQDN.遗憾的是,由于环境的配置,使用带有IPv6 TPROXY的SQUID不是一种选择.
有没有人对如何使用libpcap的Python绑定有任何想法?非常感谢你的帮助:)
谢谢 :)
我已经成功地将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) #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) 我正在编写一个程序,它使用libpcap来捕获数据包并重新组装TCP流.我的程序只是监控流量,所以我无法控制数据包的接收和传输.我的程序忽略所有非TCP/IP流量.
我从ISN计算下一个预期的序列号,然后计算连续的SEQ号.我进行了设置,以便每个TCP连接由一个由源IP,源端口,dest IP和dest端口组成的元组唯一标识.一切都顺利进行,直到我收到一个序列号不同于我所期望的数据包.我上传了屏幕截图,以帮助说明我在这里描述的内容.
我的问题是:1."丢失"数据包中的数据在哪里?2. SEQ数字顺序如何从这种情况中恢复?3.我该怎么做才能处理这些事件.
请记住; 但是,我不是在编写一个遵循TCP的程序.我正在编写一个程序,被动地监视TCP流的网络流量并尝试将原始数据保存到磁盘,我很困惑为什么上面的状态发生以及如何编程来处理它.
谢谢
我编写了一个Cocoa应用程序,它使用libpcap来监控网络流量.由于libpcap需要root权限,我想知道赋予root权限的最佳方法是什么(例如使用Package Maker?).我可以使用拖放式安装程序部署它,还是我的唯一选择?
此外,我想知道给予我的应用程序root权限所带来的安全风险.该应用程序还写入磁盘(sqlite数据库),我读到,给一个写入磁盘根权限的应用程序不是一个好主意.
我在C++中使用libpcap来读取pcap文件中的数据包,例如:
rc = pcap_next_ex((pcap_t*)handle, &header, (const unsigned char**)packet);
Run Code Online (Sandbox Code Playgroud)
我想解析数据包标头(没有有效负载).
例如,如何解析给定的数据包以提取其源和目的地IP地址?
谢谢
在Linux路由器上,我编写了一个C程序,它使用pcap来获取IP头和数据包的长度.通过这种方式,我可以收集统计数据并根据IP测量带宽.很简约.:-)
现在流量和用户数量都在增长,旧程序开始变得困难.也就是说,路由器很难应对大量的数据包.在"黄金时段"总共超过50000个包.
该程序本身已经过优化.我不想炫耀,但我相信它能够得到它的好处.它读取IP头和数据包长度.然后它将IP转换为索引(只是一个简单的减法),并将数据包的长度存储(累积)在一个数组中.它偶尔(实际上是一个SIGALRM)将数组存储在MySQL数据库中.
我的问题是:有没有其他方法可以利用以太网设备来获得比pcap"更便宜"的比特流?
我当然可以修改以太网驱动程序以包含单个IP统计信息收集,但这似乎有点矫枉过正.
基本上我的程序是繁忙的eth0上的'tcpdump',最终会杀死我的路由器.
node.js v0.8.0,XP/WIN7(不是Cygwin)
谷歌找到node_pcap(https://github.com/mranney/node_pcap)
但它只支持osx和linux.
是否有任何Windows模块?
谢谢.
.