diff --git a/FPEngine.cc b/FPEngine.cc index 6ee9883ae..9aa7a8fd7 100644 --- a/FPEngine.cc +++ b/FPEngine.cc @@ -184,9 +184,12 @@ void FPNetworkControl::init(const char *ifname, devtype iftype) { fatal("dnet: failed to open device %s", ifname); this->rawsd = -1; } else { +#ifdef WIN32 + win32_fatal_raw_sockets(ifname); +#endif if (this->rawsd >= 0) close(this->rawsd); - rawsd = nmap_raw_socket(ifname); + rawsd = nmap_raw_socket(); if (rawsd < 0) pfatal("Couldn't obtain raw socket in %s", __func__); } diff --git a/idle_scan.cc b/idle_scan.cc index 69ad4f247..d22bd584f 100644 --- a/idle_scan.cc +++ b/idle_scan.cc @@ -382,7 +382,10 @@ static void initialize_idleproxy(struct idle_proxy_info *proxy, char *proxyName, proxy->rawsd = -1; proxy->ethptr = &proxy->eth; } else { - proxy->rawsd = nmap_raw_socket(proxy->host.deviceName()); +#ifdef WIN32 + win32_fatal_raw_sockets(proxy->host.deviceName()); +#endif + proxy->rawsd = nmap_raw_socket(); if (proxy->rawsd < 0) pfatal("socket troubles in %s", __func__); unblock_socket(proxy->rawsd); diff --git a/nse_dnet.cc b/nse_dnet.cc index eefea2d9c..23a60a2e0 100644 --- a/nse_dnet.cc +++ b/nse_dnet.cc @@ -187,7 +187,7 @@ static int ethernet_send (lua_State *L) static int ip_open (lua_State *L) { nse_dnet_udata *udata = (nse_dnet_udata *) nseU_checkudata(L, 1, DNET_METATABLE, "dnet"); - udata->sock = nmap_raw_socket(NULL); + udata->sock = nmap_raw_socket(); if (udata->sock == -1) return luaL_error(L, "failed to open raw socket: %s (errno %d)", socket_strerror(socket_errno()), socket_errno()); diff --git a/osscan2.cc b/osscan2.cc index 5b8737e3b..5adfa52c0 100644 --- a/osscan2.cc +++ b/osscan2.cc @@ -1267,7 +1267,10 @@ HostOsScan::HostOsScan(Target *t) { fatal("%s: Failed to open ethernet device (%s)", __func__, t->deviceName()); rawsd = -1; } else { - rawsd = nmap_raw_socket(t->deviceName()); +#ifdef WIN32 + win32_fatal_raw_sockets(t->deviceName()); +#endif + rawsd = nmap_raw_socket(); if (rawsd < 0) pfatal("socket troubles in %s", __func__); unblock_socket(rawsd); diff --git a/scan_engine.cc b/scan_engine.cc index 9bfffdf32..2ac342115 100644 --- a/scan_engine.cc +++ b/scan_engine.cc @@ -1661,7 +1661,10 @@ void UltraScanInfo::Init(std::vector &Targets, struct scan_lists *pts, fatal("dnet: Failed to open device %s", Targets[0]->deviceName()); rawsd = -1; } else { - rawsd = nmap_raw_socket(Targets[0]->deviceName()); +#ifdef WIN32 + win32_fatal_raw_sockets(Targets[0]->deviceName()); +#endif + rawsd = nmap_raw_socket(); if (rawsd < 0) pfatal("socket troubles in %s", __func__); /* We do not wan't to unblock the socket since we want to wait diff --git a/tcpip.cc b/tcpip.cc index ac31b8920..203c2cbc5 100644 --- a/tcpip.cc +++ b/tcpip.cc @@ -139,22 +139,14 @@ static PacketCounter PktCt; /* Create a raw socket and do things that always apply to raw sockets: - * Emit a fatal error on Windows. * Set SO_BROADCAST. * Set IP_HDRINCL. * Bind to an interface with SO_BINDTODEVICE (if o.device is set). The socket is created with address family AF_INET, but may be usable for - AF_INET6, depending on the operating system. - - The argument warning_device_name is used *only* in the Windows fatal error - message, and does not affect any socket characteristics. The global o.device - controls which interface to bind to with SO_BINDTODEVICE. */ -int nmap_raw_socket(const char *warning_device_name) { + AF_INET6, depending on the operating system. */ +int nmap_raw_socket() { int rawsd; -#ifdef WIN32 - win32_fatal_raw_sockets(warning_device_name); -#endif rawsd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); if (rawsd < 0) return rawsd; diff --git a/tcpip.h b/tcpip.h index fe10213a0..ffb9bebf9 100644 --- a/tcpip.h +++ b/tcpip.h @@ -200,7 +200,7 @@ extern "C" { #define INET_ADDRSTRLEN 16 #endif -int nmap_raw_socket(const char *warning_device_name); +int nmap_raw_socket(); /* Used for tracing all packets sent or received (eg the --packet-trace option) */ diff --git a/traceroute.cc b/traceroute.cc index a61ef2303..d1cb5d5cc 100644 --- a/traceroute.cc +++ b/traceroute.cc @@ -878,7 +878,10 @@ TracerouteState::TracerouteState(std::vector &targets) { fatal("dnet: failed to open device %s", targets[0]->deviceName()); rawsd = -1; } else { - rawsd = nmap_raw_socket(targets[0]->deviceName()); +#ifdef WIN32 + win32_fatal_raw_sockets(targets[0]->deviceName()); +#endif + rawsd = nmap_raw_socket(); if (rawsd < 0) pfatal("traceroute: socket troubles"); ethsd = NULL;