当前位置:  技术问答>linux和unix

为什么libnids只能捕获单向数据流,而不是双向的

    来源: 互联网  发布时间:2016-05-13

    本文导语:    各位大侠:     我的捕获HTTP协议数据流的Libnids 程序,只能捕获响应报文,而不能捕获请求包,是怎么回事/?  是不是libnids需要进行特殊设置还是什么的啊?我的程序放在别人那就能正常执行,真郁闷!!!!...

  各位大侠:
    我的捕获HTTP协议数据流的Libnids 程序,只能捕获响应报文,而不能捕获请求包,是怎么回事/?  是不是libnids需要进行特殊设置还是什么的啊?我的程序放在别人那就能正常执行,真郁闷!!!!!!!!!!
   是这样的,我用自己的电脑做客户端,然后点击新浪博客,但是只能接受到服务器发给我的信息。而我的请求信息则一个也收不到。
  急急。

|
因为你网卡的驱动不计算校验和,而由硬件完成,当libnids发现你发送的没有计算校验和的数据包就丢弃了,只要让libnids忽略这一点就可以了。加入以下代码:
/* Example 2: disabling checksums of packets with src ip of any local interface */
static int get_all_ifaces(struct ifreq **, int *);
static unsigned int get_addr_from_ifreq(struct ifreq *);

int all_local_ipaddrs_chksum_disable()
{
struct ifreq *ifaces;
int ifaces_count;
int i, ind = 0;
struct nids_chksum_ctl *ctlp;
unsigned int tmp;

if (!get_all_ifaces(&ifaces, &ifaces_count))
return -1;
ctlp =
    (struct nids_chksum_ctl *) malloc(ifaces_count *
      sizeof(struct
     nids_chksum_ctl));
if (!ctlp)
return -1;
for (i = 0; i ifr_addr.sa_family == AF_INET)
return ((struct sockaddr_in *) &(iface->ifr_addr))->
    sin_addr.s_addr;
return 0;
}

static int get_all_ifaces(struct ifreq **ifaces, int *count)
{
int ifaces_size = 8 * sizeof(struct ifreq);
struct ifconf param;
int sock;
unsigned int i;

*ifaces = malloc(ifaces_size);
sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
if (sock 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何修改libnids的makefile文件,让编译生成的库文件放在本地路径
  • 请问libnids 程序能运行的原因
  • libnids捕捉到的gzip数据怎么解压?!!!求高手指导
  • linux下运行libnids那个自带的示例程序printall,有点问题
  • 要学习下libnids源码,前辈提点建议
  • 关于libnids开发包的问题
  • 装libnids-1.16的时候遇到这样的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3