我自己写了个在kvm虚拟机中运行的驱动,这个驱动可以伪装成一块网卡向外界发送报文,两个linux虚拟机可以通过这个驱动来相互通信,两个虚拟机相互通信是没有问题的(ping,ssh命令都是可以的),这两个虚拟机组成一个虚拟局域网,二者通过在内存中拷贝数据来模拟数据在网络上的传递。
现在我遇到一个问题:A (192.168.111.1)ping B(192.168.111.2),在A发送报文之前我使用ip_hdr(skb)->daddr(saddr) 获得报文中的目的(源)ip地址,是正确的;在B中将数据重组成skb后,netif_rx_ni()之前用同样的方式获得报文中的目的(源)ip地址,发现是里面的地址是不正确的,但是用wireshark等工具截获的报文中的目的ip地址都是正确的,郁闷!
在A和B中提取目的ip地址的方法都是一样的,是我在B中提取ip地址的位置不对吗,但是netif_rx_ni已经是内核函数了,真正的硬件网卡接收到数据还要成skb后也是交给netif_rx 处理的阿。不知道哪位高人可以帮我解决这个问题。
还有一个问题:如果A ping 192.168.111.3(不存在的ip地址)的话,那么我所解出来的目的ip地址也不是192.168.111.3,而是其他的数据,不知道是怎么回事?
急切寻求帮助


sihu123 于 2009-09-03 14:14:33发表:
有没有这方面的高手阿,大家谁来帮帮我阿!