我现在用6455开发板实现从交换机端口镜像的目标端口抓包的功能,但遇到了瓶颈。所谓交换机端口镜像抓包,举个例子,假设现在有IP地址为192.168.1.2的用户A和IP地址为192.168.1.3的用户B正在一个交换机上通信。正常来说,在同一个交换机上IP地址为192.168.1.4的用户C是不能获取A发给B的包或者B发给A的包的。但如果把用户C接在交换机端口镜像的目标端口上后就可以通过抓包软件抓到A、B之间通信的包。现在我用官网给的ndk的client例程实现了开发板与PC直接的通信,并简化到只留下echo模块(socket programming的那个echosrv.c)和利用getpeername函数读取PC的IP地址。然而,当我把开发板接入交换机端口镜像的目标端口时并没有收到包。
我的理解是交换机并没有发出connect()信号与开发板上echosrv.c中的listen()响应,所以并没有连接成功。然后我想例程中还有一种连接是通过建立daemon线程实现的。抱着试试看的心理把client例程load进开发板里(例程默认是建立daemon,屏蔽echosrv.c的),还是没有成功。。。
现在我的问题有两个:
- 我理解的daemon里面的echo模块是建立在已有的连接上的,所以只需要接收就好了,不需要listen和connect,而echosrv.c中是重新建立一个连接。不知道理解的对不对?如果对的话那daemon里面已有的连接是什么时候连接上的呢?
- 请问我得怎么样才能在6455开发板上实现类似软件抓包那种功能呢?
希望大家踊跃回答,集思广益,本人感激不尽!
Guangde Wu:
各位大神帮帮忙啊~回答第一问也好啊~这几天看了一下网卡方面的知识,感觉第二问理论上估计都不一定能走得通。。。请问一下论坛专家们,6455板子上那两块phy芯片的资料在哪能下载呢?型号分别是LXT971和BCM5464,要不说一下这两块phy芯片能不能设置为网卡那样的混杂模式也行啊⊙▽⊙拜托了各位!!!