Jak wysłać pakiet UDP z interfejsu specyficznego dla w systemie Linux przy użyciu C? Czy powinienem użyć binda? Czy można wysłać UDP z interfejsu, który nie ma adresu IP?Jak wysłać pakiet UDP z określonego interfejsu w systemie Linux?
Dzięki.
Jak wysłać pakiet UDP z interfejsu specyficznego dla w systemie Linux przy użyciu C? Czy powinienem użyć binda? Czy można wysłać UDP z interfejsu, który nie ma adresu IP?Jak wysłać pakiet UDP z określonego interfejsu w systemie Linux?
Dzięki.
Można powiązać gniazdo do określonego interfejsu za pomocą opcji SO_BINDTODEVICE
gniazdo, jednak wymaga to uprawnień roota.
Alternatywnie, można ustawić opcję IP_PKTINFO
i używać sendmsg
do wysyłania, ustawienie in_pktinfo
„s ipi_ifindex
do indeksu interfejsu.
Użyj powiązania. Nie można wysyłać pakietów UDP za pośrednictwem interfejsu, który nie ma adresu IP, ponieważ protokół UDP korzysta z protokołu internetowego, a protokół internetowy wymaga adresu IP.
Należy użyć opcji gniazda IP_MULTICAST_IF.
Zobacz tutaj: Multicast-HOWTO-6.html
Czy to nie działa tylko w przypadku multiemisji? (również wydaje się wymagać adresu) – Hasturkun
Nie wiesz: czy jest to metoda krzyżowa? Na przykład. czy działałoby to w systemie Windows®? –
@ Hi-Angel: Nie próbowałem go, ale najwyraźniej można użyć ['IPPROTO_IP'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms738586 (v = vs .85) .aspx) Opcja gniazda 'IP_UNICAST_IF' w systemie Windows. Ta opcja pobiera indeks interfejsu i powinna również działać na obecnych systemach Linux (została dodana w 2012 roku i jest obecna w Linuksie v3.4). – Hasturkun
Hmm, interesujące ... Nie znalazłem wzmianki o tej opcji w dokumentach GNU/Linux, ale znalazłem [krótką notatkę] (http://kernelnewbies.org/Linux_3.4), że została dodana, aby pomóc projektowi WINE. Mam nadzieję, że projekt WINE zdaje sobie z tego sprawę: D –