首先描述一下环境
系统:windows XP sp1
网络接口:10m 以太网
本机ip地址:192.168.0.3(仅仅就只有这一个地址,当然还有127.0.0.1)事情是这样的,我利用原始socket向本机地址192.168.0.3的某个端口发送了一个syn的tcp包,那么应该会返回一个ack,不论是ack+rst(端口没有打开)还是ack+syn(端口已经打开),但是我的原始socket并没有收到这个ack。另外,我已经设置了SIO_RCVALL,并且在向其他机器发送时都可以正常接收回应的tcp包,我想数据发送部分应该没有什么问题。那么我应该如何通过这个原始socket收到来自于本机的tcp包呢?

解决方案 »

  1.   

    是否设置了 ip_head 选项了呢用原始套街字自己组装ip包时要设置这个选项的。。
      

  2.   

    可能是不是ack附属返回的包回来你没有解析出来.
      

  3.   

    to wangle11111(wangle)
    已经设置了IP的头包含选项to Caps77(二两指针)
    网络没有问题,向其他机器发送tcp时,都可以得到正常的回应to sharkhuang(爱情和程序都读不懂)
    我也这么怀疑过,但是通过sniffer pro或者iris 来 sniffer 全过程,都没有发现相关数据,我想是因为发送给本机时走的回环那条路,所有底层sniffer没有检测到。
      

  4.   

    你制定的是哪个ip地址。如果是loopback,也并不是所有的sniffer都不检测。
      

  5.   

    我以前做过实验,ping自己的ip(真实ip,非127.0.0.1),用sniffer pro抓包也没有抓到,所以我觉得有可能是只要目的ip是本机ip,那么这个包就不会真正发送到网络上,而是在上层就处理了,就像目的ip是回环地址127.0.0.1一样。
      

  6.   

    同意楼上的ping自己是sinff不到呢因为在ip模块中对于发给自己的包是直接送回的,都不离开ip层
      

  7.   

    我也遇到过这个问题 ping自己可能是sinff不到
      

  8.   

    to yhqs540(半夜3点钟)这个原始socket绑定到了真实ip 192.168.0.3,并非 127.0.0.1。试验了一下,在这种情况下,该socket可以接收来自本机ip地址的icmp,只是无法接收来自本机地址的tcp。
      

  9.   

    谢谢大家的关注!我想……在链路层或者网络层想sniffer到来自于本机ip地址是不可能的,因为数据根本没有过去。如上文所述,现在的问题是……我的原始socket可以接收到来自任何ip地址的icmp包(包括本机地址),但是仅仅只能接收来自非本机地址的tcp,困惑中……感谢大家给予我的帮助!