特定のネットワークテストでは、eth1.900というVLANデバイスと、eth1.900:1とeth1.900.2の別名を作成しました。Linuxネットワークデバイスエイリアスを使用する場合のTCPソケットの送信元IPアドレスの指定
eth1.900 Link encap:Ethernet HWaddr 00:18:E7:17:2F:13 inet addr:1.0.1.120 Bcast:1.0.1.255 Mask:255.255.255.0 eth1.900:1 Link encap:Ethernet HWaddr 00:18:E7:17:2F:13 inet addr:1.0.1.200 Bcast:1.0.1.255 Mask:255.255.255.0 eth1.900:2 Link encap:Ethernet HWaddr 00:18:E7:17:2F:13 inet addr:1.0.1.201 Bcast:1.0.1.255 Mask:255.255.255.0
サーバーに接続するとき、これらのエイリアスのどちらを使用するかを指定する方法はありますか? -I <ip>アドレスオプションを使用して、使用するエイリアスを選択してpingできますが、余分なソケットなしで実行したいので、rawソケットを使用せずにコード内のTCPソケットを使用する方法はわかりません可能であれば、root権限で実行しないでください。
別名デバイス名が認識されないので、残念ながら、でも根で、SO_BINDTODEVICEは動作しません:
printf("Bind to %s\n", devname);
if (setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, (char*)devname, sizeof(devname)) != 0)
{
perror("SO_BINDTODEVICE");
return 1;
}
出力:すべてのインタフェースを列挙する
Bind to eth1.900:1 SO_BINDTODEVICE: No such device
'ifconfig'ではなく' ip'コマンドを使うと、*::1、 ':2'などのエイリアスなしで、単一のインタフェースに複数のアドレスを持つことができることに注意してください。それは 'ifconfig'発明のものです... – ephemient