recvfrom从原始套接字读取错误的以太网地址

时间:2014-12-02 14:32:46

标签: android c sockets

我尝试使用libpcap作为嗅探包, 但有时它会给我一个错误的以太网标题。

然后我尝试使用更简单的程序来调试此问题,行为是一样的。

然后我将libpcap移动到我的程序中,在我的目标平台(android arm linux)上执行与libpcap相同的系统调用,结果没有改变。

我试图使用另一个套接字而不是主套接字来检索接口索引。 这一次事情变得更好,错误的数据包大幅减少。但有时它们仍会出现。

节目来源:http://pastebin.com/K0JZgtiK

示例输出:http://pastebin.com/zsg0MZZF

我还在android bug跟踪器上打开了issue

我也尝试过fork而不是使用线程,但没有任何改变。

但是有两个不同的程序,一个发送,一个发嗅,正常工作。

事先感谢任何帮助,这个问题让我很生气。

更新

两个不同的程序,一个发送,一个接收,具有相同的问题。 我以前没想过,因为寄件人太慢了。 如果在recvfrom读取前一个数据包时发送数据包,则可能会出现此问题。

这里是nbns.h的相关部分:

#define NBNS_NBSTATREQ_LEN 50
extern uint8_t nbns_nbstat_request[NBNS_NBSTATREQ_LEN];

和nbns.c:

/**
 * @brief static NetBIOS NBSTAT request.
 * 
 * RFC 1002, Paragraph 4.2.17
 */
uint8_t nbns_nbstat_request[NBNS_NBSTATREQ_LEN] = {
    0x82, 0x28, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x20, 0x43, 0x4B, 0x41, 0x41, 0x41, 0x41, 0x41,
    0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
    0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41,
    0x41, 0x41, 0x41, 0x41, 0x41, 0x00, 0x00, 0x21, 0x00, 0x01
};

0 个答案:

没有答案