我正在尝试实现一个在分接接口上接收数据包(可能是 ICMP)的应用程序。我有这样的代码。
strcpy(ifName, "tap0");
if ((sockfd = socket(PF_PACKET, SOCK_RAW,0) == -1) {
perror("ERROR: socket");
}
retVal = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR,
(char *)&sockopt, sizeof(sockopt)); // int sockopt
setsockopt(sockfd, SOL_SOCKET,SO_BINDTODEVICE, ifName, IFNAMSIZ-1);
max_sd = sockfd;
FD_SET(sockfd, &readfds);
// Similarly I have other fd's for tap1 and tap2 set to this &readfds
timeout.tv_sec = 30;
timeout.tv_usec = 0;
retVal = select(max_sd + 1, &readfds, NULL,NULL,&timeout);
if(retVal == 1){
// Now I know I got some message on one of the tap interface. How do I find out which
one ??
}
两个问题:
现在,一旦我在选择时收到一些东西,我如何找出数据包到达哪个分接接口?
另外我该如何测试这段代码。我有这些接口UP,我如何注入数据包以便这个接收功能可以工作?有人可以发出命令吗?ping 应该可以工作(它发送 ICMP 数据包)。什么是正确的命令。我试过“ping -I tap0 localhost”