パケットが自分のマシンに送られているかどうかにかかわらず、すべての着信パケットを受信し、転送されるか、パケットがローカルホスト宛てであると考えられるアプリケーションを作成します。AF_PACKETソケットをすべてのインターフェイスにバインドする
私はこの目的のためにAF_PACKET
ソケットを開いています。しかし、私のマシンは複数のインターフェースを持っているので、ソケットを複数のインターフェースにバインドして、どのインターフェースからでもすべての着信パケットを捕捉することができます。
次のコードセグメントは、ソケットを1つのインターフェイスにバインドします。どのようにしてすべてのインターフェイスにバインドするように変更できますか?また、いくつかのインターフェイスセットにバインドするにはどうしたらいいですか?同じソケットでバインドを複数回呼び出すと、別のインターフェイスとバインドできますか? man socket
を行う
strncpy ((char *) ifr.ifr_name, interface, IFNAMSIZ);
ioctl (sock, SIOCGIFINDEX, &ifr);
sll.sll_family = AF_PACKET;
sll.sll_ifindex = ifr.ifr_ifindex;
sll.sll_protocol = htons (ETH_P_IP);
if(bind (sock, (struct sockaddr *) &sll, sizeof (sll)))
{
perror("Bind");
exit(1);
}
//len = recvfrom(sock, rec_buff, 5000,0,(struct sockaddr *)&client_addr, &addr_len);
len = read(sock, rec_buff, 5000);