在一个局域网中,如何知道一个IP是否被用? 我是说在VC中如何实现了,也就是实现ping的功能 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ping那个IP,ping不到就是没人正在用。 ping的代码很多,随便找一个看看吧! 这个问题复杂了,不是一句话能说的清楚的。奖金先发了,给个E-mail,我给你一个ping源程序。 不用什么ping类,用函数ICMPECHO即可,在icmp.dll中,加载即可 ping 是没有办法的,有些主机关闭了ICMP请求的回复。用arp和rarp协议吧。 拙见: 试试gethostbyaddr()这个函数吧。它可以根据机器的IP地址返回一个机器的名字,如果不能返回,则这台机器就没开了。[email protected] 同意scklotz : 用ARP,windows的Internet helper SDK中一个函数搞定。 我用SendARP()这个函数时,好有成功,错误为87,这个错误号应该是参数错误吧,我的程序如下: IPAddr lSIP; IPAddr lDIP; PULONG pulMac=new ULONG; PULONG pulLng=new ULONG; WSADATA wsaData; DWORD dwRtn; if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) { fprintf(stderr,"WSAStartup failed with error %d\n",WSAGetLastError()); WSACleanup(); //return -1; } lSIP=inet_addr("10.168.168.168"); lDIP=inet_addr("10.168.168.163"); dwRtn=SendARP(lDIP,lSIP,pulMac,pulLng); int i=WSAGetLastError ();请问我的程序错在哪呢? msdn里实现的例子如下://// Link with ws2_32.lib and iphlpapi.lib//#include <windows.h>#include <stdio.h>#include <tchar.h>#include <iphlpapi.h>int __cdecl main(){ HRESULT hr; IPAddr ipAddr; ULONG pulMac[2]; ULONG ulLen; ipAddr = inet_addr ("216.145.25.31"); memset (pulMac, 0xff, sizeof (pulMac)); ulLen = 6; hr = SendARP (ipAddr, 0, pulMac, &ulLen); printf ("Return %08x, length %8d\n", hr, ulLen); size_t i, j; char * szMac = new char[ulLen*3]; PBYTE pbHexMac = (PBYTE) pulMac; // // Convert the binary MAC address into human-readable // for (i = 0, j = 0; i < ulLen - 1; ++i) { j += sprintf (szMac + j, "%02X:", pbHexMac[i]); } sprintf (szMac + j, "%02X", pbHexMac[i]); printf ("MAC address %s\n", szMac); delete [] szMac; return 0;} 关于VARIANT类型 各位在编程时遇到不会的功能的时候会怎么做?进来凯凯!送分题 如何把CListImage中的图象一张张复制到CBitmap中? 如何让DC变成不透明 vc和vc++.net区别在哪呢 GetSafeHwnd()是什么意思,有什么作用! 各位大虾!问一个关于VC设置的问题,折磨人啊! MFC中,我觉得字体太大,怎么修改啊? 请各位大虾帮忙啊!一个关于在用ATL生成的DLL中起线程的问题 求个记事本的源码 如何用程序把一批文件压缩到一个文件里 有“分”讨论《深入浅出MFC》。。。,若你看过,进来侃侃。。!
奖金先发了,给个E-mail,我给你一个ping源程序。
试试gethostbyaddr()这个函数吧。它可以根据机器的IP地址返回一个机器的名字,
如果不能返回,则这台机器就没开了。[email protected]
用ARP,windows的Internet helper SDK中一个函数搞定。
IPAddr lSIP;
IPAddr lDIP;
PULONG pulMac=new ULONG;
PULONG pulLng=new ULONG;
WSADATA wsaData;
DWORD dwRtn;
if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR) {
fprintf(stderr,"WSAStartup failed with error %d\n",WSAGetLastError());
WSACleanup();
//return -1;
}
lSIP=inet_addr("10.168.168.168");
lDIP=inet_addr("10.168.168.163");
dwRtn=SendARP(lDIP,lSIP,pulMac,pulLng);
int i=WSAGetLastError ();
请问我的程序错在哪呢?
//
// Link with ws2_32.lib and iphlpapi.lib
//#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <iphlpapi.h>
int __cdecl main()
{
HRESULT hr;
IPAddr ipAddr;
ULONG pulMac[2];
ULONG ulLen; ipAddr = inet_addr ("216.145.25.31");
memset (pulMac, 0xff, sizeof (pulMac));
ulLen = 6;
hr = SendARP (ipAddr, 0, pulMac, &ulLen);
printf ("Return %08x, length %8d\n", hr, ulLen);
size_t i, j;
char * szMac = new char[ulLen*3];
PBYTE pbHexMac = (PBYTE) pulMac; //
// Convert the binary MAC address into human-readable
//
for (i = 0, j = 0; i < ulLen - 1; ++i) {
j += sprintf (szMac + j, "%02X:", pbHexMac[i]);
}
sprintf (szMac + j, "%02X", pbHexMac[i]);
printf ("MAC address %s\n", szMac);
delete [] szMac; return 0;
}