bind socket interface réseau
Comment puis-je lier un socket à une interface réseau particulière? J'ai essayé d'utiliser setsockopt
sur le côté serveur, mais les clients peuvent toujours accéder au service via eth0 et lo interfaces.
Je peux l'obtenir par le réglage de l'adresse IP à l'aide de serv_addr.sin_addr.s_addr
.
Mais je pense que nous pouvons lier à une interface en utilisant seulement setsockopt
(sans faire mention de l'adresse IP).
OriginalL'auteur user2003595 | 2013-01-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez lier à une interface spécifique par la mise en
SO_BINDTODEVICE
option de socket.Avertissement: Vous devez être root et avoir la
CAP_NET_RAW
capacité afin de pouvoir utiliser cette option.La seconde méthode est que vous pouvez resolv adresse IP liée à une interface getifaddrs().
Suivre le dernier lien pour un exemple complet.
Vous avez raison.... mis à jour 😉
J'ai une nouvelle question, il importe eth0 et eth1 ont la même adresse IP à l'aide de votre méthode?
OriginalL'auteur
La seule façon que vous pouvez faire c'est comme vous le mentionnez -
Vous ne pouvez pas le faire sans connaître l'adresse à se lier à.
Vous pouvez utiliser
ioctl
s pour déterminer l'adresse IP actuelle si vous avez besoin, s'il y a peut être un meilleur moyen pour ce faire, ces jours - je n'ai pas fait beaucoup dans moderne des distributions Linux dernièrement.OriginalL'auteur