我尝试使用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
};