LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 710|回复: 4

有用libpcap开发过程序的老大么,最近开始学这个,遇到一个不太明白的问题。

[复制链接]
发表于 2009-4-10 10:04:27 | 显示全部楼层 |阅读模式
之前的问题解决了,确实是指针的问题,这种问题浪费大家的热情来看代码实在是很可耻。(可惜不能匿,囧rz)
考虑再开帖子麻烦,干脆就在这个帖子里写写我自己学习libpcap的一些问题,大家如果用过或者正在学习,就一起来讨论吧。
如果有比较好的问题和回帖,我会再编辑到主贴里来。
谢谢!
2009/04/21
现在我的代码已经陆陆续续成型了,我的目的是写一个抓包和发包的程序。
目前抓到包之后,我将报文长度打印出来,结果就出来一个问题。
代码如下:
……
pd = pcap_open_live (dev_name, IP_LENGTH, 0, 1000, ebuf);
……
while(1)
{
……
    pcap_loop (pd, 1, My_Callback, NULL);
      printf("pd->bufsize: %ld\n",ntohs(pd->bufsize));
……
}
……
在函数My_Callback(u_char *args,const struct pcap_pkthdr* pkthdr,const u_char* packet)里,将pkthdr->caplen
打印出来,结果符合我的预期,但是在代码中打印pd->bufsize确完全不对。
我的理解是这两处应该都是包的净荷长度+以太网头+IP头+CRC,不知道哪里出了问题。
有谁帮忙解释一下。
发表于 2009-4-12 17:42:36 | 显示全部楼层
p_ip_add和p_mask是指针吧。还有嵌套定义函数感觉不太好吧,虽然gcc认可,但其它编译器可能会报错的。话说刚晓得gcc竟然可以嵌套定义函数
回复 支持 反对

使用道具 举报

发表于 2009-4-13 22:04:29 | 显示全部楼层
试试这样做呢printf("IP Add:0x%lx\n" ,inet_ntoa(p_ip_add));我也是才学一个星期 嘻嘻
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-21 15:09:41 | 显示全部楼层
确实是指针问题,自己仔细走了一遍代码就OK了,诶,太不小心了。而且被人一催就晕菜了。
回复 支持 反对

使用道具 举报

发表于 2009-4-21 19:35:22 | 显示全部楼层
最近毕业设计也在做类似的东西。其实感觉看看官方网站的文档蛮不错的,虽然都是英文的http://www.tcpdump.org/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表