mirror of
https://github.com/nmap/nmap.git
synced 2026-01-20 21:29:06 +00:00
devname2ipaddr now requires address family, so correct addr is returned.
This commit is contained in:
@@ -1436,7 +1436,7 @@ int ipaddr2devname(char *dev, const struct sockaddr_storage *addr) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int devname2ipaddr(char *dev, struct sockaddr_storage *addr) {
|
||||
int devname2ipaddr(char *dev, int af, struct sockaddr_storage *addr) {
|
||||
struct interface_info *ifaces;
|
||||
int numifaces;
|
||||
int i;
|
||||
@@ -1446,7 +1446,7 @@ int devname2ipaddr(char *dev, struct sockaddr_storage *addr) {
|
||||
return -1;
|
||||
|
||||
for (i = 0; i < numifaces; i++) {
|
||||
if (!strcmp(dev, ifaces[i].devfullname)) {
|
||||
if (af == ifaces[i].addr.ss_family && !strcmp(dev, ifaces[i].devfullname)) {
|
||||
*addr = ifaces[i].addr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -318,7 +318,7 @@ int ipaddr2devname( char *dev, const struct sockaddr_storage *addr );
|
||||
|
||||
/* Convert a network interface name (IE ppp0 eth0) to an IP address.
|
||||
* Returns 0 on success or -1 in case of error. */
|
||||
int devname2ipaddr(char *dev, struct sockaddr_storage *addr);
|
||||
int devname2ipaddr(char *dev, int af, struct sockaddr_storage *addr);
|
||||
|
||||
int sockaddr_equal(const struct sockaddr_storage *a,
|
||||
const struct sockaddr_storage *b);
|
||||
|
||||
2
nmap.cc
2
nmap.cc
@@ -1729,7 +1729,7 @@ void apply_delayed_options() {
|
||||
if (*o.device && !o.SourceSockAddr()) {
|
||||
struct sockaddr_storage tmpsock;
|
||||
memset(&tmpsock, 0, sizeof(tmpsock));
|
||||
if (devname2ipaddr(o.device, &tmpsock) == -1) {
|
||||
if (devname2ipaddr(o.device, o.af(), &tmpsock) == -1) {
|
||||
fatal("I cannot figure out what source address to use for device %s, does it even exist?", o.device);
|
||||
}
|
||||
o.setSourceSockAddr(&tmpsock, sizeof(tmpsock));
|
||||
|
||||
@@ -1416,7 +1416,6 @@ struct sockaddr_storage *NpingOps::getSourceSockAddr(struct sockaddr_storage *ss
|
||||
s6->sin6_addr=this->getIPv6SourceAddress();
|
||||
else
|
||||
s6->sin6_addr=in6addr_any;
|
||||
s6->sin6_addr=this->getIPv6SourceAddress();
|
||||
s6->sin6_family=AF_INET6;
|
||||
if(this->issetSourcePort())
|
||||
s6->sin6_port=htons(this->getSourcePort());
|
||||
@@ -2392,7 +2391,7 @@ if( this->getMode()!=TCP_CONNECT && this->getMode()!=UDP_UNPRIV && this->getRole
|
||||
else
|
||||
this->setDevice( dev );
|
||||
/* Libpcap gave us a device name, try to obtain it's IP */
|
||||
if ( devname2ipaddr_alt(this->getDevice(), &ifaddr) != 0 ){
|
||||
if ( devname2ipaddr(this->getDevice(), this->af(), &ifaddr) != 0 ){
|
||||
if( this->isRoot() )
|
||||
nping_fatal(QT_3,"Cannot figure out what source address to use for device %s, does it even exist?", this->getDevice());
|
||||
else
|
||||
|
||||
@@ -736,48 +736,3 @@ void getpts_aux(const char *origexpr, int nested, u8 *porttbl, int *portwarning)
|
||||
#ifndef IPPROTO_SCTP
|
||||
#define IPPROTO_SCTP 132
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/* IPv6 compatible version of Nmap's devname2ipaddr()
|
||||
* @warning For this to work we need getinterfaces() not to skip IPv6 */
|
||||
int devname2ipaddr_alt(char *dev, struct sockaddr_storage *addr) {
|
||||
struct interface_info *mydevs;
|
||||
struct sockaddr_storage *s=NULL;
|
||||
struct sockaddr_in *s4=NULL;
|
||||
struct sockaddr_in6 *s6=NULL;
|
||||
int numdevs;
|
||||
int i;
|
||||
mydevs = getinterfaces(&numdevs, NULL, 0);
|
||||
|
||||
if (!mydevs) return -1;
|
||||
|
||||
if( !addr || !dev )
|
||||
fatal("devname2ipaddr(): NULL values supplied.");
|
||||
|
||||
for(i=0; i < numdevs; i++) {
|
||||
s=(struct sockaddr_storage *)&mydevs[i].addr;
|
||||
s4=(struct sockaddr_in *)&mydevs[i].addr;
|
||||
s6=(struct sockaddr_in6 *)&mydevs[i].addr;
|
||||
if (s4->sin_family==AF_INET || s6->sin6_family==AF_INET6){
|
||||
if (!strcmp(dev, mydevs[i].devfullname)) {
|
||||
memcpy(addr, s, sizeof(struct sockaddr_storage));
|
||||
return 0;
|
||||
}
|
||||
} else{ /* Unknown family, skipping it... */
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
|
||||
} /* End of devname2ipaddr() */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -135,7 +135,6 @@ class TargetGroup {
|
||||
/*****************************************************************************
|
||||
* STUFF FROM tcpip.cc
|
||||
****************************************************************************/
|
||||
int devname2ipaddr_alt(char *dev, struct sockaddr_storage *addr);
|
||||
void getpts_aux(const char *origexpr, int nested, u8 *porttbl, int *portwarning);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user