这份源码怎么都编译通过不了,是什么原因呢?谁可以指点下?或者留下个联系方式,给个源码
#include <atlconv.h>
#include "winsock.h"
#include <atlbase.h>
#include <afx.h>
void GetNameAndIp()
{
struct hostent* host;
struct in_addr* ptr;
DWORD dwScope = RESOURCE_CONTEXT;
NETRESOURCE* NetResource = NULL;
HANDLE hEnum;
WNetOpenEnum(dwScope, NULL, NULL, NULL, &hEnum);
WSADATA wsaData;
WSAStartup(MAKEWORD(1, 1), &wsaData);
if (hEnum)
{
DWORD Count = 0xFFFFFFFF;
DWORD BufferSize = 10240;
LPVOID Buffer = new char[10240];
WNetEnumResource(hEnum, &Count, Buffer, &BufferSize);
NetResource = (NETRESOURCE*)Buffer;
char szHostName[200];
for (unsigned int i = 0; i < BufferSize / sizeof(NETRESOURCE); i++, NetResource++)
{
if (NetResource->dwUsage == RESOURCEUSAGE_CONTAINER && NetResource->dwType == RESOURCETYPE_ANY)
{
if (NetResource->lpRemoteName)
{
CString strFullName = NetResource->lpRemoteName;
if (0 == strFullName.Left(2).Compare(_T("\\\\")))
strFullName = strFullName.Right(strFullName.GetLength() - 2);
gethostname(szHostName, strlen(szHostName));
USES_CONVERSION;
char* pchar = T2A(strFullName);
host = gethostbyname(pchar);
if (host == NULL) continue;
ptr = (struct in_addr*) host->h_addr_list[0];
string str = "";
for (int n = 0; n < 4; n++)
{
CString addr;
if (n > 0)
{
str += ".";
}
int value = (unsigned int)((unsigned char*)host->h_addr_list[0])[n];
char p[20];
//sprintf(p, "%d", value);
str.append(p);
}
//std::cout << "IP:" << str << " Name:" << host->h_name << std::endl;
}
}
}
delete Buffer;
WNetCloseEnum(hEnum);
}
WSACleanup();
}
获取本地内网所有计算机及其IP 在Windows上用bat脚本就可以实现了,用c++实现就是大刀切蒜苗!
给你bat源码:
@echo off
title %~n0
color 0a
setlocal enabledelayedexpansion
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set "网段IP="
set "网段="
set "临时目录="
set "输出文件="
set "Ping输出文件="
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
call :打印网关IP
if "" EQU "!网段IP!" (
echo 当前无有效网络,任意键结束......
pause>nul
goto :eof
)
set /p 网段IP=请输入IP网段(回车默认:!网段IP!):
for /f "tokens=1,2,3 delims=." %%a in ("!网段IP!") do (
set "网段=%%a.%%b.%%c."
set "临时目录=网段!网段!TEMP"
set "输出文件=!网段!网段IP在线主机"
)
( mkdir "!临时目录!" )>nul 2>nul
for /l %%a in ( 0 1 255 ) do (
set "Ping输出文件=!临时目录!\Ping!网段!%%a主机.txt"
set "IP地址=!网段!%%a"
call :启动扫描一个IP地址 "!IP地址!" "!Ping输出文件!"
)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo.
:循环侦测Ping完成
set "Ping完成="
for /l %%a in ( 0 1 255 ) do (
set "Ping输出文件=!临时目录!\Ping!网段!%%a主机.txt"
type "!Ping输出文件!" | find /i "已发送" >nul || set "Ping完成=0"
)
if "" NEQ "!Ping完成!" (
echo 正在Ping网段 !网段! 的所有主机 请稍后...
TimeOut 60
goto :循环侦测Ping完成
)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set "当前时间信息=%date:~0,4%年%date:~5,2%月%date:~8,2%日%time:~0,2%点%time:~3,2%分%time:~6,2%秒"
set "当前时间信息=!当前时间信息: =!"
set "输出文件=!输出文件! !当前时间信息!.txt"
echo.
(
echo !当前时间信息!
echo 网段 !网段! 的在线主机有:
)>"!输出文件!"
set /a 主机计数=0
for /l %%a in ( 0 1 255 ) do (
set "IP地址=!网段!%%a"
set "Ping输出文件=!临时目录!\Ping!网段!%%a主机.txt"
type "!Ping输出文件!" | find /i "ttl" >nul && (
set /a 主机计数=!主机计数! + 1
call :获取MAC地址 "!IP地址!" "MAC地址"
if "" NEQ "!MAC地址!" (
echo 在线主机!主机计数!: !IP地址! !MAC地址! !MAC地址:-=:!
echo 在线主机!主机计数!: !IP地址! !MAC地址! !MAC地址:-=:!>>"!输出文件!"
)
if "" EQU "!MAC地址!" (
echo 在线主机!主机计数!: !IP地址! !MAC地址!
echo 在线主机!主机计数!: !IP地址! !MAC地址!>>"!输出文件!"
)
) || (
call :获取MAC地址 "!IP地址!" "MAC地址"
if "" NEQ "!MAC地址!" if /i "ff-ff-ff-ff-ff-ff" NEQ "!MAC地址!" (
set /a 主机计数=!主机计数! + 1
echo 在线主机!主机计数!: !IP地址! !MAC地址! !MAC地址:-=:! Ping不通
echo 在线主机!主机计数!: !IP地址! !MAC地址! !MAC地址:-=:! Ping不通>>"!输出文件!"
)
)
)
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
(RmDir /Q/S "!临时目录!" )>nul 2>nul
echo.
echo 扫描完毕!任意键结束....
pause>nul
(RmDir /Q/S "!临时目录!" )>nul 2>nul
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:获取MAC地址
if "" EQU "%~1" goto :eof
if "" EQU "%~2" goto :eof
set "%~2="
for /f "tokens=1,2,3 delims= " %%a in ('arp -a') do if "%~1" EQU "%%a" (
set "%~2=%%b"
goto :eof
)
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:启动扫描一个IP地址
if "" EQU "%1" goto :eof
if "" EQU "%2" goto :eof
start /B cmd.exe /c "ping %~1 -n 10 >%~2"
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:打印网关IP
set "临时变量1="
set "临时变量2="
set "临时变量3="
echo 当前可选网关IP:
for /f "delims=" %%a in ('arp -a') do (
set "临时变量1=!临时变量2!"
set "临时变量2=!临时变量3!"
set "临时变量3=%%a"
( echo !临时变量1! | find "---" >nul) && for /f "tokens=1 delims= " %%b in ("%%a") do set "网段IP=%%b" & echo %%b
)
goto :eof
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::