1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-17 21:19:01 +00:00

3.84ALPHA1 release imminant

This commit is contained in:
fyodor
2005-08-11 05:07:01 +00:00
parent d0369ebb4f
commit b3923483ea
22 changed files with 943 additions and 937 deletions

View File

@@ -1,10 +1,6 @@
# Nmap Changelog ($Id$) # Nmap Changelog ($Id$)
Nmap 3.83DC13 Nmap 3.84ALPHA1
o Removed WinIP library (and all Windows raw sockets code) since MS
has gone and broken raw sockets. Maybe packet receipt via raw
sockets will come back at some point.
o Added the ability for Nmap to send and properly route raw ethernet o Added the ability for Nmap to send and properly route raw ethernet
packets cointaining IP datagrams rather than always sending the packets cointaining IP datagrams rather than always sending the
@@ -85,11 +81,15 @@ o Added "Exclude" directive to nmap-service-probes grammar which
probes, etc. If you really want to scan all ports, specify probes, etc. If you really want to scan all ports, specify
--allports. This patch came from Doug Hoyte (doug(a)hcsw.org). --allports. This patch came from Doug Hoyte (doug(a)hcsw.org).
o Added a stripped-down version of Dug Song's excellent libdnet o Added a stripped-down and heavily modified version of Dug Song's
networking library (v. 1.10). This helps with the new raw ethernet libdnet networking library (v. 1.10). This helps with the new raw
features. I made various changes, which are described in ethernet features. My changes are described in
libdnet-stripped/NMAP_MODIFICATIONS libdnet-stripped/NMAP_MODIFICATIONS
o Removed WinIP library (and all Windows raw sockets code) since MS
has gone and broken raw sockets. Maybe packet receipt via raw
sockets will come back at some point.
o Chagned the interesting ports array from a 65K-member array of o Chagned the interesting ports array from a 65K-member array of
pointers into an STL list. This noticeable reduces memory usage in pointers into an STL list. This noticeable reduces memory usage in
some cases, and should also give a slight runtime performance some cases, and should also give a slight runtime performance
@@ -115,6 +115,15 @@ o Added a bunch of RPC numbers from nmap-rpc maintainer Eilon Gishri
o Added some new RPC services to nmap-rpc thanks to a patch from o Added some new RPC services to nmap-rpc thanks to a patch from
vlad902 (vlad902(a)gmail.com). vlad902 (vlad902(a)gmail.com).
o Fixed a bug where Nmap would quit on Windows whenever it encountered
a raw scan of localhost (including the local ethernet interface
address), even when that was just one address out of a whole network
being scanned. Now Nmap just warns that it is skipping raw scans when
it encounters the local IP, but continues on to scan the rest of the
network. Raw scans do not currently work against local IP addresses
because Winpcap doesn't support reading/writing localhost interfaces
due to limitations of Windows.
o The OS fingerprint is now provided in XML output if debugging is o The OS fingerprint is now provided in XML output if debugging is
enabled (-d) or verbosity is at least 2 (-v -v). This patch was enabled (-d) or verbosity is at least 2 (-v -v). This patch was
sent by Okan Demirmen (okan(a)demirmen.com) sent by Okan Demirmen (okan(a)demirmen.com)

View File

@@ -1,4 +1,4 @@
export NMAP_VERSION = 3.83.DC17 export NMAP_VERSION = 3.84ALPHA1
NMAP_NAME= nmap NMAP_NAME= nmap
NMAP_URL= http://www.insecure.org/nmap/ NMAP_URL= http://www.insecure.org/nmap/
NMAP_PLATFORM=@host@ NMAP_PLATFORM=@host@

View File

@@ -101,7 +101,9 @@
#include "nmap.h" #include "nmap.h"
#include "nbase.h" #include "nbase.h"
#include "NmapOps.h" #include "NmapOps.h"
#ifdef WIN32
#include "winfix.h" #include "winfix.h"
#endif
NmapOps o; NmapOps o;
@@ -268,7 +270,11 @@ bool NmapOps::RawScan() {
void NmapOps::ValidateOptions() { void NmapOps::ValidateOptions() {
#ifdef WIN32
const char *privreq = "that WinPcap version 3.1 or higher and iphlpapi.dll be installed. You seem to be missing one or both of these. Winpcap is available from http://www.winpcap.org. iphlpapi.dll comes with Win98 and later operating sytems and NT 4.0 with SP4 or greater. For previous windows versions, you may be able to take iphlpapi.dll from anotyer system and place it in your system32 dir (e.g. c:\\windows\\system32)";
#else
const char *privreq = "root privileges";
#endif
if (pingtype == PINGTYPE_UNKNOWN) { if (pingtype == PINGTYPE_UNKNOWN) {
if (isr00t && af() == AF_INET) pingtype = DEFAULT_PING_TYPES; if (isr00t && af() == AF_INET) pingtype = DEFAULT_PING_TYPES;
else pingtype = PINGTYPE_TCP; // if nonr00t or IPv6 else pingtype = PINGTYPE_TCP; // if nonr00t or IPv6
@@ -353,35 +359,19 @@ void NmapOps::ValidateOptions() {
#endif #endif
if (ackscan|finscan|idlescan|ipprotscan|maimonscan|nullscan|synscan|udpscan|windowscan|xmasscan) { if (ackscan|finscan|idlescan|ipprotscan|maimonscan|nullscan|synscan|udpscan|windowscan|xmasscan) {
#ifndef WIN32 fatal("You requested a scan type which requires %s. Sorry dude.\n", privreq);
fatal("You requested a scan type which requires r00t privileges, and you do not have them.\n");
#else
win_barf(0);
#endif
} }
if (numdecoys > 0) { if (numdecoys > 0) {
#ifndef WIN32 fatal("Sorry, but decoys (-D) require %s.\n", privreq);
fatal("Sorry, but you've got to be r00t to use decoys, boy!");
#else
win_barf(0);
#endif
} }
if (fragscan) { if (fragscan) {
#ifndef WIN32 fatal("Sorry, but fragscan requires %s\n", privreq);
fatal("Sorry, but fragscan requires r00t privileges\n");
#else
win_barf(0);
#endif
} }
if (osscan) { if (osscan) {
#ifndef WIN32 fatal("TCP/IP fingerprinting (for OS scan) requires %s. Sorry, dude.\n", privreq);
fatal("TCP/IP fingerprinting (for OS scan) requires root privileges which you do not appear to possess. Sorry, dude.\n");
#else
win_barf(0);
#endif
} }
} }

View File

@@ -761,4 +761,4 @@ AC_OUTPUT(Makefile)
if test -f docs/leet-nmap-ascii-art.txt; then if test -f docs/leet-nmap-ascii-art.txt; then
cat docs/leet-nmap-ascii-art.txt cat docs/leet-nmap-ascii-art.txt
fi fi
echo "Configuration complete. Type make to compile." echo "Configuration complete. Type make (or gmake on some *BSD machines) to compile."

View File

@@ -1,4 +1,4 @@
Nmap 3.83.DC16 Usage: nmap [Scan Type(s)] [Options] <host or net list> Nmap 3.84ALPHA1 Usage: nmap [Scan Type(s)] [Options] <host or net list>
Some Common Scan Types ('*' options require root privileges) Some Common Scan Types ('*' options require root privileges)
* -sS TCP SYN stealth port scan (default if privileged (root)) * -sS TCP SYN stealth port scan (default if privileged (root))
-sT TCP connect() port scan (default for unprivileged users) -sT TCP connect() port scan (default for unprivileged users)

View File

@@ -962,6 +962,11 @@ void idle_scan(Target *target, u16 *portarray, int numports,
if (target->timedOut(NULL)) if (target->timedOut(NULL))
return; return;
if (target->ifType() == devt_loopback) {
log_write(LOG_STDOUT, "Skipping Idle Scan against %s -- you can't idle scan your own machine (localhost).\n", target->NameIP());
return;
}
target->startTimeOutClock(NULL); target->startTimeOutClock(NULL);
/* If this is the first call, */ /* If this is the first call, */

View File

@@ -31,9 +31,15 @@ o A number of portability changes to remove errors/warnings during
o Added libdnet-stripped.vcproj -- A Visual Studio.Net project file o Added libdnet-stripped.vcproj -- A Visual Studio.Net project file
for dnet. for dnet.
o Changed eth_open() in eth-win32.c to more frequently consider the o Rewrote eth_open() for Win32 as its technique for translating from
results of PacketGetAdapterNames() to be in single-char format rather a dnet-named interface to a pcap-named one did not work on any of my
than 2-byte wide characters. systems.
o Added intf_get_pcap_devname() function for Win32. This tries to
convert a dnet if name into its pcap equivalent. It is a hack, but
arguably better than the hacks that were there before. The main
down side is that it won't work with interfaces that don't have an
IPv4 address configured.
o Made some code changes to intf.c (the patch below). This does the following: o Made some code changes to intf.c (the patch below). This does the following:

View File

@@ -60,7 +60,7 @@
CharacterSet="2"> CharacterSet="2">
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
AdditionalIncludeDirectories="include" AdditionalIncludeDirectories="include;&quot;..\mswin32\pcap-include&quot;"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB" PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="4" RuntimeLibrary="4"
UsePrecompiledHeader="0" UsePrecompiledHeader="0"

View File

@@ -1,137 +1,137 @@
<?xml version="1.0" encoding="Windows-1252"?> <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject <VisualStudioProject
ProjectType="Visual C++" ProjectType="Visual C++"
Version="7.10" Version="7.10"
Name="libpcre" Name="libpcre"
ProjectGUID="{5DE86C7A-DE72-4265-8807-4CA38F94F22A}" ProjectGUID="{5DE86C7A-DE72-4265-8807-4CA38F94F22A}"
Keyword="Win32Proj"> Keyword="Win32Proj">
<Platforms> <Platforms>
<Platform <Platform
Name="Win32"/> Name="Win32"/>
</Platforms> </Platforms>
<Configurations> <Configurations>
<Configuration <Configuration
Name="Debug|Win32" Name="Debug|Win32"
OutputDirectory="." OutputDirectory="."
IntermediateDirectory="Debug" IntermediateDirectory="Debug"
ConfigurationType="4" ConfigurationType="4"
CharacterSet="2"> CharacterSet="2">
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
Optimization="0" Optimization="0"
PreprocessorDefinitions="WIN32;_DEBUG;_LIB" PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
MinimalRebuild="TRUE" MinimalRebuild="TRUE"
BasicRuntimeChecks="3" BasicRuntimeChecks="3"
RuntimeLibrary="5" RuntimeLibrary="5"
UsePrecompiledHeader="0" UsePrecompiledHeader="0"
WarningLevel="3" WarningLevel="3"
Detect64BitPortabilityProblems="FALSE" Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="4" DebugInformationFormat="4"
CompileAs="1"/> CompileAs="1"/>
<Tool <Tool
Name="VCCustomBuildTool"/> Name="VCCustomBuildTool"/>
<Tool <Tool
Name="VCLibrarianTool" Name="VCLibrarianTool"
OutputFile="$(OutDir)/libpcre.lib"/> OutputFile="$(OutDir)/libpcre.lib"/>
<Tool <Tool
Name="VCMIDLTool"/> Name="VCMIDLTool"/>
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"/>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"/>
<Tool <Tool
Name="VCResourceCompilerTool"/> Name="VCResourceCompilerTool"/>
<Tool <Tool
Name="VCWebServiceProxyGeneratorTool"/> Name="VCWebServiceProxyGeneratorTool"/>
<Tool <Tool
Name="VCXMLDataGeneratorTool"/> Name="VCXMLDataGeneratorTool"/>
<Tool <Tool
Name="VCManagedWrapperGeneratorTool"/> Name="VCManagedWrapperGeneratorTool"/>
<Tool <Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/> Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration> </Configuration>
<Configuration <Configuration
Name="Release|Win32" Name="Release|Win32"
OutputDirectory="." OutputDirectory="."
IntermediateDirectory="Release" IntermediateDirectory="Release"
ConfigurationType="4" ConfigurationType="4"
CharacterSet="2"> CharacterSet="2">
<Tool <Tool
Name="VCCLCompilerTool" Name="VCCLCompilerTool"
PreprocessorDefinitions="WIN32;NDEBUG;_LIB" PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
RuntimeLibrary="4" RuntimeLibrary="4"
UsePrecompiledHeader="0" UsePrecompiledHeader="0"
WarningLevel="3" WarningLevel="3"
Detect64BitPortabilityProblems="FALSE" Detect64BitPortabilityProblems="FALSE"
DebugInformationFormat="3" DebugInformationFormat="3"
CompileAs="1"/> CompileAs="1"/>
<Tool <Tool
Name="VCCustomBuildTool"/> Name="VCCustomBuildTool"/>
<Tool <Tool
Name="VCLibrarianTool" Name="VCLibrarianTool"
OutputFile="$(OutDir)/libpcre.lib"/> OutputFile="$(OutDir)/libpcre.lib"/>
<Tool <Tool
Name="VCMIDLTool"/> Name="VCMIDLTool"/>
<Tool <Tool
Name="VCPostBuildEventTool"/> Name="VCPostBuildEventTool"/>
<Tool <Tool
Name="VCPreBuildEventTool"/> Name="VCPreBuildEventTool"/>
<Tool <Tool
Name="VCPreLinkEventTool"/> Name="VCPreLinkEventTool"/>
<Tool <Tool
Name="VCResourceCompilerTool"/> Name="VCResourceCompilerTool"/>
<Tool <Tool
Name="VCWebServiceProxyGeneratorTool"/> Name="VCWebServiceProxyGeneratorTool"/>
<Tool <Tool
Name="VCXMLDataGeneratorTool"/> Name="VCXMLDataGeneratorTool"/>
<Tool <Tool
Name="VCManagedWrapperGeneratorTool"/> Name="VCManagedWrapperGeneratorTool"/>
<Tool <Tool
Name="VCAuxiliaryManagedWrapperGeneratorTool"/> Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
</Configuration> </Configuration>
</Configurations> </Configurations>
<References> <References>
</References> </References>
<Files> <Files>
<Filter <Filter
Name="Source Files" Name="Source Files"
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"> UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
<File <File
RelativePath=".\get.c"> RelativePath=".\get.c">
</File> </File>
<File <File
RelativePath=".\maketables.c"> RelativePath=".\maketables.c">
</File> </File>
<File <File
RelativePath=".\pcre.c"> RelativePath=".\pcre.c">
</File> </File>
<File <File
RelativePath=".\study.c"> RelativePath=".\study.c">
</File> </File>
</Filter> </Filter>
<Filter <Filter
Name="Header Files" Name="Header Files"
Filter="h;hpp;hxx;hm;inl;inc;xsd" Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File <File
RelativePath=".\internal.h"> RelativePath=".\internal.h">
</File> </File>
<File <File
RelativePath=".\pcre_win.h"> RelativePath=".\pcre_win.h">
</File> </File>
<File <File
RelativePath=".\pcre_winconfig.h"> RelativePath=".\pcre_winconfig.h">
</File> </File>
</Filter> </Filter>
<Filter <Filter
Name="Resource Files" Name="Resource Files"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"> UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
</Filter> </Filter>
</Files> </Files>
<Globals> <Globals>
</Globals> </Globals>
</VisualStudioProject> </VisualStudioProject>

View File

@@ -1,58 +1,58 @@
Microsoft Visual Studio Solution File, Format Version 8.00 Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmap", "nmap.vcproj", "{361719F0-AB42-4C93-9DE8-7D2144B96625}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nmap", "nmap.vcproj", "{361719F0-AB42-4C93-9DE8-7D2144B96625}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
{5DE86C7A-DE72-4265-8807-4CA38F94F22A} = {5DE86C7A-DE72-4265-8807-4CA38F94F22A} {5DE86C7A-DE72-4265-8807-4CA38F94F22A} = {5DE86C7A-DE72-4265-8807-4CA38F94F22A}
{5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C} = {5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C} {5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C} = {5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}
{F8D6D1E3-D4EA-402C-98AA-168E5309BAF4} = {F8D6D1E3-D4EA-402C-98AA-168E5309BAF4} {F8D6D1E3-D4EA-402C-98AA-168E5309BAF4} = {F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}
{B630C8F7-3138-43E8-89ED-78742FA2AC5F} = {B630C8F7-3138-43E8-89ED-78742FA2AC5F} {B630C8F7-3138-43E8-89ED-78742FA2AC5F} = {B630C8F7-3138-43E8-89ED-78742FA2AC5F}
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nsock", "..\nsock\nsock.vcproj", "{F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nsock", "..\nsock\nsock.vcproj", "{F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
{B630C8F7-3138-43E8-89ED-78742FA2AC5F} = {B630C8F7-3138-43E8-89ED-78742FA2AC5F} {B630C8F7-3138-43E8-89ED-78742FA2AC5F} = {B630C8F7-3138-43E8-89ED-78742FA2AC5F}
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre", "..\libpcre\libpcre.vcproj", "{5DE86C7A-DE72-4265-8807-4CA38F94F22A}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libpcre", "..\libpcre\libpcre.vcproj", "{5DE86C7A-DE72-4265-8807-4CA38F94F22A}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nbase", "..\nbase\nbase.vcproj", "{B630C8F7-3138-43E8-89ED-78742FA2AC5F}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nbase", "..\nbase\nbase.vcproj", "{B630C8F7-3138-43E8-89ED-78742FA2AC5F}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dnet", "..\libdnet-stripped\libdnet-stripped.vcproj", "{5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dnet", "..\libdnet-stripped\libdnet-stripped.vcproj", "{5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}"
ProjectSection(ProjectDependencies) = postProject ProjectSection(ProjectDependencies) = postProject
EndProjectSection EndProjectSection
EndProject EndProject
Global Global
GlobalSection(SolutionConfiguration) = preSolution GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug Debug = Debug
Release = Release Release = Release
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution GlobalSection(ProjectConfiguration) = postSolution
{361719F0-AB42-4C93-9DE8-7D2144B96625}.Debug.ActiveCfg = Debug|Win32 {361719F0-AB42-4C93-9DE8-7D2144B96625}.Debug.ActiveCfg = Debug|Win32
{361719F0-AB42-4C93-9DE8-7D2144B96625}.Debug.Build.0 = Debug|Win32 {361719F0-AB42-4C93-9DE8-7D2144B96625}.Debug.Build.0 = Debug|Win32
{361719F0-AB42-4C93-9DE8-7D2144B96625}.Release.ActiveCfg = Release|Win32 {361719F0-AB42-4C93-9DE8-7D2144B96625}.Release.ActiveCfg = Release|Win32
{361719F0-AB42-4C93-9DE8-7D2144B96625}.Release.Build.0 = Release|Win32 {361719F0-AB42-4C93-9DE8-7D2144B96625}.Release.Build.0 = Release|Win32
{F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}.Debug.ActiveCfg = Debug|Win32 {F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}.Debug.ActiveCfg = Debug|Win32
{F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}.Debug.Build.0 = Debug|Win32 {F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}.Debug.Build.0 = Debug|Win32
{F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}.Release.ActiveCfg = Release|Win32 {F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}.Release.ActiveCfg = Release|Win32
{F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}.Release.Build.0 = Release|Win32 {F8D6D1E3-D4EA-402C-98AA-168E5309BAF4}.Release.Build.0 = Release|Win32
{5DE86C7A-DE72-4265-8807-4CA38F94F22A}.Debug.ActiveCfg = Debug|Win32 {5DE86C7A-DE72-4265-8807-4CA38F94F22A}.Debug.ActiveCfg = Debug|Win32
{5DE86C7A-DE72-4265-8807-4CA38F94F22A}.Debug.Build.0 = Debug|Win32 {5DE86C7A-DE72-4265-8807-4CA38F94F22A}.Debug.Build.0 = Debug|Win32
{5DE86C7A-DE72-4265-8807-4CA38F94F22A}.Release.ActiveCfg = Release|Win32 {5DE86C7A-DE72-4265-8807-4CA38F94F22A}.Release.ActiveCfg = Release|Win32
{5DE86C7A-DE72-4265-8807-4CA38F94F22A}.Release.Build.0 = Release|Win32 {5DE86C7A-DE72-4265-8807-4CA38F94F22A}.Release.Build.0 = Release|Win32
{B630C8F7-3138-43E8-89ED-78742FA2AC5F}.Debug.ActiveCfg = Debug|Win32 {B630C8F7-3138-43E8-89ED-78742FA2AC5F}.Debug.ActiveCfg = Debug|Win32
{B630C8F7-3138-43E8-89ED-78742FA2AC5F}.Debug.Build.0 = Debug|Win32 {B630C8F7-3138-43E8-89ED-78742FA2AC5F}.Debug.Build.0 = Debug|Win32
{B630C8F7-3138-43E8-89ED-78742FA2AC5F}.Release.ActiveCfg = Release|Win32 {B630C8F7-3138-43E8-89ED-78742FA2AC5F}.Release.ActiveCfg = Release|Win32
{B630C8F7-3138-43E8-89ED-78742FA2AC5F}.Release.Build.0 = Release|Win32 {B630C8F7-3138-43E8-89ED-78742FA2AC5F}.Release.Build.0 = Release|Win32
{5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}.Debug.ActiveCfg = Debug|Win32 {5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}.Debug.ActiveCfg = Debug|Win32
{5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}.Debug.Build.0 = Debug|Win32 {5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}.Debug.Build.0 = Debug|Win32
{5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}.Release.ActiveCfg = Release|Win32 {5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}.Release.ActiveCfg = Release|Win32
{5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}.Release.Build.0 = Release|Win32 {5328E0BE-BC0A-4C2A-8CB9-CE00B61B9C4C}.Release.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

File diff suppressed because it is too large Load Diff

View File

@@ -74,24 +74,6 @@
#include <netinet/tcp.h> #include <netinet/tcp.h>
#include <netinet/udp.h> #include <netinet/udp.h>
//#include <packet_types.h>
#include "winip\winip.h"
/* This is kind of ugly ... and worse is that windows includes suply an errno that doesn't work as in UNIX, so if a file
forgets to include this, it may use errno and get bogus results on Windows [shrug]. A better appraoch is probably
the nsock_errno() I use in nsock. */
// #undef errno
// #define errno WSAGetLastError()
/* Disables VC++ warning:
"integral size mismatch in argument; conversion supplied". Perhaps
I should try to fix this with casts at some point */
// #pragma warning(disable: 4761)
/* #define signal(x,y) ((void)0) // ignore for now
// later release may set console handlers
*/
/* non-functioning stub function */ /* non-functioning stub function */
int fork(); int fork();

View File

@@ -132,17 +132,6 @@ int pcap_avail = 0;
static void win_cleanup(void); static void win_cleanup(void);
static char pcaplist[4096]; static char pcaplist[4096];
void win_barf(const char *msg)
{
if(msg) printf("%s\n\n", msg);
printf("\nYour system doesn't have iphlpapi.dll\n\nIf you have Win95, "
"maybe you could grab it from a Win98 system\n"
"If you have NT4, you need service pack 4 or higher\n"
"If you have NT3.51, try grabbing it from an NT4 system\n"
"Otherwise, your system has problems ;-)\n");
exit(0);
}
void win_init() void win_init()
{ {
// variables // variables

10
nmap.cc
View File

@@ -107,7 +107,9 @@
#include "timing.h" #include "timing.h"
#include "NmapOps.h" #include "NmapOps.h"
#include "MACLookup.h" #include "MACLookup.h"
#ifdef WIN32
#include "winfix.h" #include "winfix.h"
#endif
using namespace std; using namespace std;
@@ -791,6 +793,12 @@ int nmap_main(int argc, char *argv[]) {
fatal("You cannot use -F (fast scan) or -p (explicit port selection) with PING scan or LIST scan"); fatal("You cannot use -F (fast scan) or -p (explicit port selection) with PING scan or LIST scan");
} }
#ifdef WIN32
if (o.sendpref & PACKET_SEND_IP) {
error("WARNING: raw IP (rather than raw ethernet) packet sending attempted on Windows. This probably won't work. Consider --send_eth next time.\n");
}
#endif
if (spoofmac) { if (spoofmac) {
u8 mac_data[6]; u8 mac_data[6];
int pos = 0; /* Next index of mac_data to fill in */ int pos = 0; /* Next index of mac_data to fill in */
@@ -1190,7 +1198,7 @@ int nmap_main(int argc, char *argv[]) {
// Should be host parallelized. Though rarely takes a huge amt. of time. // Should be host parallelized. Though rarely takes a huge amt. of time.
if (o.osscan) if (o.osscan)
os_scan(currenths); os_scan(currenths);
/* Now I can do the output and such for each host */ /* Now I can do the output and such for each host */
log_write(LOG_XML, "<host>"); log_write(LOG_XML, "<host>");
write_host_status(currenths, resolve_all); write_host_status(currenths, resolve_all);

View File

@@ -104,7 +104,7 @@
#ifndef NMAP_WINCONFIG_H #ifndef NMAP_WINCONFIG_H
#define NMAP_WINCONFIG_H #define NMAP_WINCONFIG_H
#define NMAP_VERSION "3.83.DC16" #define NMAP_VERSION "3.84ALPHA1"
#define NMAP_NAME "nmap" #define NMAP_NAME "nmap"
#define NMAP_URL "http://www.insecure.org/nmap" #define NMAP_URL "http://www.insecure.org/nmap"
#define NMAP_PLATFORM "i686-pc-windows-windows" #define NMAP_PLATFORM "i686-pc-windows-windows"

132
osscan.cc
View File

@@ -159,7 +159,7 @@ int seq_response_num; /* response # for sequencing */
double avg_ts_hz = 0.0; /* Avg. amount that timestamps incr. each second */ double avg_ts_hz = 0.0; /* Avg. amount that timestamps incr. each second */
struct link_header linkhdr; struct link_header linkhdr;
struct eth_nfo eth; struct eth_nfo eth;
struct eth_nfo *ethptr; // for passing to send_ functions struct eth_nfo *ethptr; // for passing to send_ functions
if (target->timedOut(NULL)) if (target->timedOut(NULL))
return NULL; return NULL;
@@ -302,7 +302,7 @@ if (o.verbose && openport != (unsigned long) -1)
/* Test 8 */ /* Test 8 */
if (!FPtests[8]) { if (!FPtests[8]) {
if (o.scan_delay) enforce_scan_delay(NULL); if (o.scan_delay) enforce_scan_delay(NULL);
upi = send_closedudp_probe(rawsd, target->v4hostip(), o.magic_port, closedport); upi = send_closedudp_probe(rawsd, ethptr, target->v4hostip(), o.magic_port, closedport);
} }
gettimeofday(&t1, NULL); gettimeofday(&t1, NULL);
timeout = 0; timeout = 0;
@@ -1170,6 +1170,13 @@ int bestaccidx;
if (target->timedOut(NULL)) if (target->timedOut(NULL))
return 1; return 1;
#ifdef WIN32
if (target->ifType() == devt_loopback) {
log_write(LOG_STDOUT, "Skipping OS Scan against %s because it doesn't work against your own machine (localhsot)\n", target->NameIP());
return 1;
}
#endif
if (o.debugging > 2) { if (o.debugging > 2) {
starttimems = o.TimeSinceStartMS(); starttimems = o.TimeSinceStartMS();
log_write(LOG_STDOUT|LOG_NORMAL|LOG_SKID, "Initiating OS Detection against %s at %.3fs\n", target->targetipstr(), starttimems / 1000.0); log_write(LOG_STDOUT|LOG_NORMAL|LOG_SKID, "Initiating OS Detection against %s at %.3fs\n", target->targetipstr(), starttimems / 1000.0);
@@ -1699,7 +1706,8 @@ return AVs;
} }
struct udpprobeinfo *send_closedudp_probe(int sd, const struct in_addr *victim, struct udpprobeinfo *send_closedudp_probe(int sd, struct eth_nfo *eth,
const struct in_addr *victim,
u16 sport, u16 dport) { u16 sport, u16 dport) {
static struct udpprobeinfo upi; static struct udpprobeinfo upi;
@@ -1729,82 +1737,78 @@ memset(data, patternbyte, datalen);
while(!id) id = get_random_uint(); while(!id) id = get_random_uint();
/* check that required fields are there and not too silly */ /* check that required fields are there and not too silly */
if ( !victim || !sport || !dport || sd < 0) { if ( !victim || !sport || !dport || (!eth && sd < 0)) {
fprintf(stderr, "send_closedudp_probe: One or more of your parameters suck!\n"); fprintf(stderr, "send_closedudp_probe: One or more of your parameters suck!\n");
return NULL; return NULL;
} }
if (!myttl) myttl = (time(NULL) % 14) + 51; if (!myttl) myttl = (time(NULL) % 14) + 51;
/* It was a tough decision whether to do this here for every packet
or let the calling function deal with it. In the end I grudgingly decided
to do it here and potentially waste a couple microseconds... */
sethdrinclude(sd);
for(decoy=0; decoy < o.numdecoys; decoy++) { for(decoy=0; decoy < o.numdecoys; decoy++) {
source = &o.decoys[decoy]; source = &o.decoys[decoy];
memset((char *) packet, 0, sizeof(struct ip) + sizeof(udphdr_bsd)); memset((char *) packet, 0, sizeof(struct ip) + sizeof(udphdr_bsd));
udp->uh_sport = htons(sport); udp->uh_sport = htons(sport);
udp->uh_dport = htons(dport); udp->uh_dport = htons(dport);
udp->uh_ulen = htons(8 + datalen); udp->uh_ulen = htons(8 + datalen);
/* Now the psuedo header for checksuming */ /* Now the psuedo header for checksuming */
pseudo->source.s_addr = source->s_addr; pseudo->source.s_addr = source->s_addr;
pseudo->dest.s_addr = victim->s_addr; pseudo->dest.s_addr = victim->s_addr;
pseudo->proto = IPPROTO_UDP; pseudo->proto = IPPROTO_UDP;
pseudo->length = htons(sizeof(udphdr_bsd) + datalen); pseudo->length = htons(sizeof(udphdr_bsd) + datalen);
/* OK, now we should be able to compute a valid checksum */ /* OK, now we should be able to compute a valid checksum */
realcheck = in_cksum((unsigned short *)pseudo, 20 /* pseudo + UDP headers */ + realcheck = in_cksum((unsigned short *)pseudo, 20 /* pseudo + UDP headers */ +
datalen); datalen);
#if STUPID_SOLARIS_CHECKSUM_BUG #if STUPID_SOLARIS_CHECKSUM_BUG
udp->uh_sum = sizeof(udphdr_bsd) + datalen; udp->uh_sum = sizeof(udphdr_bsd) + datalen;
#else #else
udp->uh_sum = realcheck; udp->uh_sum = realcheck;
#endif #endif
/* Goodbye, pseudo header! */ /* Goodbye, pseudo header! */
memset(pseudo, 0, sizeof(*pseudo)); memset(pseudo, 0, sizeof(*pseudo));
/* Now for the ip header */ /* Now for the ip header */
ip->ip_v = 4; ip->ip_v = 4;
ip->ip_hl = 5; ip->ip_hl = 5;
ip->ip_len = htons(sizeof(struct ip) + sizeof(udphdr_bsd) + datalen); ip->ip_len = htons(sizeof(struct ip) + sizeof(udphdr_bsd) + datalen);
ip->ip_id = id; ip->ip_id = id;
ip->ip_ttl = myttl; ip->ip_ttl = myttl;
ip->ip_p = IPPROTO_UDP; ip->ip_p = IPPROTO_UDP;
ip->ip_src.s_addr = source->s_addr; ip->ip_src.s_addr = source->s_addr;
ip->ip_dst.s_addr= victim->s_addr; ip->ip_dst.s_addr= victim->s_addr;
upi.ipck = in_cksum((unsigned short *)ip, sizeof(struct ip)); upi.ipck = in_cksum((unsigned short *)ip, sizeof(struct ip));
#if HAVE_IP_IP_SUM #if HAVE_IP_IP_SUM
ip->ip_sum = upi.ipck; ip->ip_sum = upi.ipck;
#endif #endif
/* OK, now if this is the real she-bang (ie not a decoy) then /* OK, now if this is the real she-bang (ie not a decoy) then
we stick all the inph0 in our upi */ we stick all the inph0 in our upi */
if (decoy == o.decoyturn) { if (decoy == o.decoyturn) {
upi.iptl = 28 + datalen; upi.iptl = 28 + datalen;
upi.ipid = id; upi.ipid = id;
upi.sport = sport; upi.sport = sport;
upi.dport = dport; upi.dport = dport;
upi.udpck = realcheck; upi.udpck = realcheck;
upi.udplen = 8 + datalen; upi.udplen = 8 + datalen;
upi.patternbyte = patternbyte; upi.patternbyte = patternbyte;
upi.target.s_addr = ip->ip_dst.s_addr; upi.target.s_addr = ip->ip_dst.s_addr;
} }
if (TCPIP_DEBUGGING > 1) { if (TCPIP_DEBUGGING > 1) {
log_write(LOG_STDOUT, "Raw UDP packet creation completed! Here it is:\n"); log_write(LOG_STDOUT, "Raw UDP packet creation completed! Here it is:\n");
readudppacket(packet,1); readudppacket(packet,1);
} }
if ((res = send_ip_packet(sd, NULL, packet, ntohs(ip->ip_len))) == -1) if ((res = send_ip_packet(sd, eth, packet, ntohs(ip->ip_len))) == -1)
{ {
perror("send_ip_packet in send_closedupd_probe"); perror("send_ip_packet in send_closedupd_probe");
return NULL; return NULL;
} }
} }
return &upi; return &upi;

View File

@@ -123,10 +123,9 @@ int os_scan(Target *target);
FingerPrint *get_fingerprint(Target *target, struct seq_info *si); FingerPrint *get_fingerprint(Target *target, struct seq_info *si);
struct AVal *fingerprint_iptcppacket(struct ip *ip, int mss, unsigned int syn); struct AVal *fingerprint_iptcppacket(struct ip *ip, int mss, unsigned int syn);
struct AVal *fingerprint_portunreach(struct ip *ip, struct udpprobeinfo *upi); struct AVal *fingerprint_portunreach(struct ip *ip, struct udpprobeinfo *upi);
struct udpprobeinfo *send_closedudp_probe(int rawsd, struct udpprobeinfo *send_closedudp_probe(int sd, struct eth_nfo *eth,
const struct in_addr *dest, const struct in_addr *victim,
u16 sport, u16 dport); u16 sport, u16 dport);
unsigned int get_gcd_n_ulong(int numvalues, unsigned int *values); unsigned int get_gcd_n_ulong(int numvalues, unsigned int *values);
unsigned int euclid_gcd(unsigned int a, unsigned int b); unsigned int euclid_gcd(unsigned int a, unsigned int b);
char *fp2ascii(FingerPrint *FP); char *fp2ascii(FingerPrint *FP);

View File

@@ -609,56 +609,61 @@ Port *PortList::nextPort(Port *afterthisport,
bool allow_portzero) { bool allow_portzero) {
/* These two are chosen because they come right "before" port 1/tcp */ /* These two are chosen because they come right "before" port 1/tcp */
unsigned int current_proto = IPPROTO_TCP; map<u16,Port*>::iterator iter;
map<u16,Port*>::iterator iter = tcp_ports.begin();
if (afterthisport) {
current_proto = afterthisport->proto;
// This will advacne to one after the current if (afterthisport) {
while (iter != tcp_ports.end() && iter->second->portno <= afterthisport->portno) { if (afterthisport->proto == IPPROTO_TCP) {
iter++; iter = tcp_ports.find(afterthisport->portno);
} assert(iter != tcp_ports.end());
} iter++;
while(iter != tcp_ports.end()) {
/* if (afterthisport) if (!allowed_state || iter->second->state == allowed_state)
printf("Next Port After %d, %d\n", afterthisport->portno, iter->second->portno); fflush(0); return iter->second;
*/ iter++;
if (!allow_portzero && iter->second && iter->second->portno == 0) iter++;
/* First we look for TCP ports ... */
if (current_proto == IPPROTO_TCP) {
if ((allowed_protocol == 0 || allowed_protocol == IPPROTO_TCP) &&
current_proto == IPPROTO_TCP)
while (iter != tcp_ports.end()) {
if (!allowed_state || iter->second->state == allowed_state) {
//printf("Returning %d\n", iter->second->portno);
return iter->second;
} }
/* No more TCP ports ... */
if (allowed_protocol != 0)
return NULL;
iter = udp_ports.begin();
} else {
assert(afterthisport->proto == IPPROTO_UDP);
iter = udp_ports.find(afterthisport->portno);
assert(iter != udp_ports.end());
iter++; iter++;
} }
while(iter != udp_ports.end()) {
/* Uh-oh. We have tried all tcp ports, lets move to udp */ if (!allowed_state || iter->second->state == allowed_state)
current_proto = IPPROTO_UDP; return iter->second;
iter = udp_ports.begin(); iter++;
} }
return NULL;
if ((allowed_protocol == 0 || allowed_protocol == IPPROTO_UDP) && }
current_proto == IPPROTO_UDP) {
while (iter != udp_ports.end()) { // First-time call - try TCP ports first
if (!allowed_state || iter->second->state == allowed_state) { if (allowed_protocol == 0 || allowed_protocol == IPPROTO_TCP) {
//printf("Returning %d\n", iter->second->portno); iter = tcp_ports.begin();
return iter->second; while (iter != tcp_ports.end()) {
if (!allowed_state || iter->second->state == allowed_state)
return iter->second;
iter++;
} }
iter++;
} }
// Maybe we'll have better luck with UDP
if (allowed_protocol == 0 || allowed_protocol == IPPROTO_UDP) {
iter = udp_ports.begin();
while (iter != udp_ports.end()) {
if (!allowed_state || iter->second->state == allowed_state)
return iter->second;
iter++;
}
}
// Nuthing found
return NULL;
} }
/* No more ports */
return NULL;
}
// Move some popular TCP ports to the beginning of the portlist, because // Move some popular TCP ports to the beginning of the portlist, because
// that can speed up certain scans. You should have already done any port // that can speed up certain scans. You should have already done any port

View File

@@ -690,7 +690,7 @@ bool GroupScanStats::sendOK() {
don't give us a proper pcap time. Also for connect scans, since don't give us a proper pcap time. Also for connect scans, since
we don't get an exact response time with them either. */ we don't get an exact response time with them either. */
if (USI->scantype == CONNECT_SCAN || !pcap_recv_timeval_valid()) { if (USI->scantype == CONNECT_SCAN || !pcap_recv_timeval_valid()) {
int to_ms = (int) MAX(to.srtt * .75 / 1000, 20); int to_ms = (int) MAX(to.srtt * .75 / 1000, 50);
if (TIMEVAL_MSEC_SUBTRACT(USI->now, last_wait) > to_ms) if (TIMEVAL_MSEC_SUBTRACT(USI->now, last_wait) > to_ms)
return false; return false;
} }
@@ -2276,6 +2276,7 @@ static bool do_one_select_round(UltraScanInfo *USI, struct timeval *stime) {
recvfrom6_t optlen = sizeof(int); recvfrom6_t optlen = sizeof(int);
char buf[128]; char buf[128];
int numGoodSD = 0; int numGoodSD = 0;
int err = 0;
#ifdef LINUX #ifdef LINUX
int res; int res;
struct sockaddr_storage sin,sout; struct sockaddr_storage sin,sout;
@@ -2294,15 +2295,17 @@ static bool do_one_select_round(UltraScanInfo *USI, struct timeval *stime) {
timeout.tv_sec = timeleft / 1000; timeout.tv_sec = timeleft / 1000;
timeout.tv_usec = (timeleft % 1000) * 1000; timeout.tv_usec = (timeleft % 1000) * 1000;
if (CSI->numSDs) if (CSI->numSDs) {
selectres = select(CSI->maxValidSD + 1, &fds_rtmp, &fds_wtmp, selectres = select(CSI->maxValidSD + 1, &fds_rtmp, &fds_wtmp,
&fds_xtmp, &timeout); &fds_xtmp, &timeout);
err = socket_errno();
}
else { else {
/* Apparently Windows returns an WSAEINVAL if you select without watching any SDs. Lame. We'll usleep instead in that case */ /* Apparently Windows returns an WSAEINVAL if you select without watching any SDs. Lame. We'll usleep instead in that case */
usleep(timeleft * 1000); usleep(timeleft * 1000);
selectres = 0; selectres = 0;
} }
} while (selectres == -1 && socket_errno() == EINTR); } while (selectres == -1 && err == EINTR);
gettimeofday(&USI->now, NULL); gettimeofday(&USI->now, NULL);
@@ -3139,10 +3142,18 @@ void ultra_scan(vector<Target *> &Targets, struct scan_lists *ports,
stype scantype) { stype scantype) {
UltraScanInfo *USI = NULL; UltraScanInfo *USI = NULL;
time_t starttime; time_t starttime;
if (Targets.size() == 0) { if (Targets.size() == 0) {
return; return;
} }
#ifdef WIN32
if (scantype != CONNECT_SCAN && Targets[0]->ifType() == devt_loopback) {
log_write(LOG_STDOUT, "Skipping %s against %s because Windows does not support scanning your own machine (localhost) this way.\n", scantype2str(scantype), Targets[0]->NameIP());
return;
}
#endif
startTimeOutClocks(Targets); startTimeOutClocks(Targets);
USI = new UltraScanInfo(Targets, ports, scantype); USI = new UltraScanInfo(Targets, ports, scantype);

View File

@@ -79,7 +79,7 @@ distro:
$(SHTOOL) mkdir /usr/tmp/nmap-$(NMAP_VERSION)/mswin32 $(SHTOOL) mkdir /usr/tmp/nmap-$(NMAP_VERSION)/mswin32
cd ../mswin32; cp -ra *.[hHcC] *.cc ARPA NET NETINET RPC icon1.ico \ cd ../mswin32; cp -ra *.[hHcC] *.cc ARPA NET NETINET RPC icon1.ico \
ifaddrlist.h lib libpcap-note.txt nmap.rc \ ifaddrlist.h lib libpcap-note.txt nmap.rc \
nmap_performance.reg nmap.sln nmap.vcproj winip pcap-include \ nmap_performance.reg nmap.sln nmap.vcproj pcap-include \
/usr/tmp/nmap-$(NMAP_VERSION)/mswin32 /usr/tmp/nmap-$(NMAP_VERSION)/mswin32
$(SHTOOL) mkdir /usr/tmp/nmap-$(NMAP_VERSION)/$(LIBPCAPDIR) $(SHTOOL) mkdir /usr/tmp/nmap-$(NMAP_VERSION)/$(LIBPCAPDIR)

View File

@@ -423,7 +423,7 @@ if (hs->randomize) {
/* TODO: Maybe I should allow real ping scan of directly connected /* TODO: Maybe I should allow real ping scan of directly connected
ethernet hosts? */ ethernet hosts? */
/* Then we do the mass ping (if required - IP-level pings) */ /* Then we do the mass ping (if required - IP-level pings) */
if (*pingtype == PINGTYPE_NONE) { if (*pingtype == PINGTYPE_NONE || hs->hostbatch[0]->ifType() == devt_loopback) {
for(i=0; i < hs->current_batch_sz; i++) { for(i=0; i < hs->current_batch_sz; i++) {
initialize_timeout_info(&hs->hostbatch[i]->to); initialize_timeout_info(&hs->hostbatch[i]->to);
hs->hostbatch[i]->flags |= HOST_UP; /*hostbatch[i].up = 1;*/ hs->hostbatch[i]->flags |= HOST_UP; /*hostbatch[i].up = 1;*/
@@ -1073,7 +1073,7 @@ while(pt->block_unaccounted) {
case ECONNREFUSED: case ECONNREFUSED:
case EAGAIN: case EAGAIN:
#ifdef WIN32 #ifdef WIN32
// case WSAENOTCONN: // needed? this fails around here on my system case WSAENOTCONN:
#endif #endif
if (sock_err == EAGAIN && o.verbose) { if (sock_err == EAGAIN && o.verbose) {
log_write(LOG_STDOUT, "Machine %s MIGHT actually be listening on probe port %d\n", hostbatch[hostindex]->targetipstr(), o.ping_synprobes[p]); log_write(LOG_STDOUT, "Machine %s MIGHT actually be listening on probe port %d\n", hostbatch[hostindex]->targetipstr(), o.ping_synprobes[p]);

View File

@@ -138,8 +138,6 @@ extern void CloseLibs(void);
#endif #endif
#ifdef WIN32 #ifdef WIN32
#include "mswin32/winip/winip.h"
#include "pcap-int.h" #include "pcap-int.h"
void nmapwin_init(); void nmapwin_init();