小弟写了个程序,可以查找出局域网内正在使用的IP及所对应的MAC,在x86下完全没问题,已经可以查找出并在table上显示出相关内容,如下图所示。
但是下载到开发板就发ARP请求包出错了,用Wireshark抓包发现目标IP地址左移了16位,比如发送192.168.150.5变成发送150.5.0.0。
其中的主要文件有ip.cpp、ip.h、searchIP.c、searchIP.h,因有C程序与C++程序而使用C/C++混合编译。
若执行时在Terminal窗口出现Get host’s information failed提示信息,那么要在searchIP.c文件中的70与83行修改为相应的网卡名。
(1)在还没有做图形界面时,即只有这两个文件(searchIP.c、searchIP.h)时也出现过像现在这样的问题,即在虚拟机下可以,但下载到开发板上后也是出现发送192.168.150.5变成发送150.5.0.0。后来将结构体修改后在开发板上也能成功运行,所修改的结构体如下:
struct arp_pkt {
struct ether_header eh;//
struct ether_arp ea;
//u_char padding[18]; //修改之处:将此行注释便成功运行于开发板
} req;
(2)下载开发板时,是用arm-linux-gcc编译产生的可执行文件
在虚拟机下时,是用linux-generic-g++编译产生可执行文件
(3)有图形界面后,在searchIP.c文件中添加如下语句在 if(searchingIP==startIP)socketinit();语句之后
searchingIP=searchingIP>>16; //右移16位
在开发板上运行将出现发送192.168.150.5变成发送192.168.0.0
在开发板上运行时,本来只有接收到口响应包才会把IP及其MAC地址写到table上,但在发出192.168.0.0
或150.6.0.0之后,开发板仍然将192.168.0.0或150.6.0.0直接写到table表格中的IP列上,MAC列空白,如图所示
各位大侠帮帮忙啊!!!!!!!在下感激不尽啊!!!!!!!!!
以上问题已经实现,不过上面的方法在开发板上还是行不通,期待高手解决!!!!
[ 此帖被gen216ius在2010-05-24 00:13重新编辑 ]