Thanks, Valdik! I reviewed the code and moved the call to socket_bindtodevice() to ProbeMode::start() so that it will affect all modes, not just TCP. The change is in r39078.
Dan On Thu, May 30, 2024 at 12:54 PM David Fifield <da...@bamsoftware.com> wrote: > I was going to ask if the same is needed for IPv6, but SO_BINDTODEVICE > is already being set for IPv6: > > https://github.com/nmap/nmap/blob/b6e67f834c8cae6c91a33e13ded0c4936534c3df/nping/ProbeMode.cc#L723 > > There's a function socket_bindtodevice in Nbase that should perhaps be > used in both these places: > > https://github.com/nmap/nmap/blob/b6e67f834c8cae6c91a33e13ded0c4936534c3df/nbase/nbase_misc.c#L264 > > https://github.com/nmap/nmap/commit/6ec453e4e8ec5e1d7270d305f5818611fd92431c > > On Thu, May 30, 2024 at 07:43:46PM +0300, ValdikSS via dev wrote: > > Linux RAW sockets need to be bound to interface, if the interface is > > L3 tunnel (OpenVPN TUN for example). > > Otherwise the packet goes via default route, regardless of > > `--interface` or `--source-ip` options. > > --- > > nping/ProbeMode.cc | 11 +++++++++++ > > 1 file changed, 11 insertions(+) > > > > diff --git a/nping/ProbeMode.cc b/nping/ProbeMode.cc > > index 199329b40..ba4c3f82d 100644 > > --- a/nping/ProbeMode.cc > > +++ b/nping/ProbeMode.cc > > @@ -807,6 +807,17 @@ int ProbeMode::fillPacketTCP(NpingTarget *target, > u16 port, u8 *buff, int buffle > > }else{ > > t.setSum(); > > } > > + > > + /* Bind IPv4 socket to a specific network interface */ > > + if ( o.issetDevice() ) { > > + /* It seems that SO_BINDTODEVICE only work on Linux */ > > + #ifdef LINUX > > + if (setsockopt(rawfd, SOL_SOCKET, SO_BINDTODEVICE, > o.getDevice(), strlen(o.getDevice())+1) == -1) { > > + nping_warning(QT_2, "Error binding IPv4 socket to > device %s", o.getDevice() ); > > + } > > + #endif > > + } > > + > > /* Store result in user supplied buffer */ > > *filledlen = i.dumpToBinaryBuffer(buff, bufflen); > _______________________________________________ > Sent through the dev mailing list > https://nmap.org/mailman/listinfo/dev > Archived at https://seclists.org/nmap-dev/ >
_______________________________________________ Sent through the dev mailing list https://nmap.org/mailman/listinfo/dev Archived at https://seclists.org/nmap-dev/