代码如下
//在link项中加ws2_32.lib#include <windows.h>
#include <WinSock.h>
#include <stdio.h>
#include <string.h>typedef struct tagIPINFO
{
u_char Ttl;
u_char Tos;
u_char IPFlags;
u_char OptSize;
u_char FAR *Options;
}IPINFO,*PIPINFO;typedef struct tagICMPECHO
{
u_long Source;
u_long Status;
u_long RTTime;
u_short DataSize;
u_short Reserved;
void FAR *pData;
IPINFO ipInfo;
}ICMPECHO,*PICMPECHO;HANDLE (WINAPI *pIcmpCreateFile)(VOID);
BOOL (WINAPI *pIcmpCloseHandle)(HANDLE);
DWORD(WINAPI *pIcmpSendEcho)(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD);void main(int argc,char **argv)
{
WSADATA wsaData;
ICMPECHO icmpEcho;
HANDLE hndlIcmp;
HANDLE hndlFile;
LPHOSTENT pHost;
struct in_addr Dest;
DWORD *dwAddress;
IPINFO ipInfo;
int nRet;
DWORD dwRet;
int x;
if(argc!=2)
{
fprintf(stderr,"\nSyntax:ping HostNameOrIPAddress\n");
return;
}
hndlIcmp=LoadLibrary("ICMP.DLL");
if(hndlIcmp==NULL)
{
fprintf(stderr,"\nCould not load ICMPDLL\n");
return;
}
pIcmpCreateFile=(HANDLE(WINAPI*)(void))GetProcAddress(hndlIcmp,"IcmpCreateFile");
pIcmpCloseHandle=(BOOL(WINAPI*)(HANDLE))GetProcAddress(hndlIcmp,"IcmpClossHandle");
pIcmpSendEcho=(DWORD(WINAPI*)(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD))GetProcAddress(hndlIcmp,"icmpSendEcho");
if(pIcmpCreateFile==NULL ||
pIcmpCloseHandle==NULL ||
pIcmpSendEcho==NULL)//运行到这里就停了,搞不懂,
{
fprintf(stderr,"\nError getting ICMP proc address\n");
FreeLibrary(hndlIcmp);
return;
}
//init WinSock
nRet=WSAStartup(MAKEWORD(1,1),&wsaData);
if(nRet)
{
fprintf(stderr,"\nWSAStartup() error:%d\n",nRet);
WSACleanup();
FreeLibrary(hndlIcmp);
return;
}
if(0x0101!=wsaData.wVersion )
{
fprintf(stderr,"\nWinSock versin 1.1 supported\n");
WSACleanup();
FreeLibrary(hndlIcmp);
return;
}
Dest.S_un .S_addr =inet_addr(argv[1]);
if(Dest.S_un .S_addr ==INADDR_NONE)
pHost=gethostbyname(argv[1]);
else
pHost=gethostbyaddr((const char *)&Dest ,sizeof(struct in_addr),AF_INET);
if(pHost==NULL)
{
fprintf(stderr,"\n%s not found\n",argv[1]);
WSACleanup();
FreeLibrary(hndlIcmp);
return;
}
printf("\nPinging %s[%s]",pHost->h_name ,inet_ntoa((*(LPIN_ADDR)pHost->h_addr_list [0])));
dwAddress=(DWORD*)(*pHost->h_addr_list );
hndlFile=pIcmpCreateFile();
for(x=0;x<4;x++)
{
ipInfo.Ttl =255;
ipInfo.Tos =0;
ipInfo.IPFlags =0;
ipInfo.Options =NULL;
dwRet=pIcmpSendEcho(hndlFile,
*dwAddress,
NULL,
0,
&ipInfo,
&icmpEcho,
sizeof(struct tagICMPECHO),
5000);
Dest.S_un .S_addr =icmpEcho.Source;
printf("\nReply from %s Time=%ldms TTL=%d",
inet_ntoa(Dest),
icmpEcho.RTTime,
icmpEcho.ipInfo.Ttl);
if(icmpEcho.Status)
{
printf("\nError:icmpEcho.Status=%ld",icmpEcho.Status);
break;
}
}
printf("\n");
pIcmpCloseHandle(hndlFile);
FreeLibrary(hndlIcmp);
WSACleanup();
}
请帮帮忙找出问题,
//在link项中加ws2_32.lib#include <windows.h>
#include <WinSock.h>
#include <stdio.h>
#include <string.h>typedef struct tagIPINFO
{
u_char Ttl;
u_char Tos;
u_char IPFlags;
u_char OptSize;
u_char FAR *Options;
}IPINFO,*PIPINFO;typedef struct tagICMPECHO
{
u_long Source;
u_long Status;
u_long RTTime;
u_short DataSize;
u_short Reserved;
void FAR *pData;
IPINFO ipInfo;
}ICMPECHO,*PICMPECHO;HANDLE (WINAPI *pIcmpCreateFile)(VOID);
BOOL (WINAPI *pIcmpCloseHandle)(HANDLE);
DWORD(WINAPI *pIcmpSendEcho)(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD);void main(int argc,char **argv)
{
WSADATA wsaData;
ICMPECHO icmpEcho;
HANDLE hndlIcmp;
HANDLE hndlFile;
LPHOSTENT pHost;
struct in_addr Dest;
DWORD *dwAddress;
IPINFO ipInfo;
int nRet;
DWORD dwRet;
int x;
if(argc!=2)
{
fprintf(stderr,"\nSyntax:ping HostNameOrIPAddress\n");
return;
}
hndlIcmp=LoadLibrary("ICMP.DLL");
if(hndlIcmp==NULL)
{
fprintf(stderr,"\nCould not load ICMPDLL\n");
return;
}
pIcmpCreateFile=(HANDLE(WINAPI*)(void))GetProcAddress(hndlIcmp,"IcmpCreateFile");
pIcmpCloseHandle=(BOOL(WINAPI*)(HANDLE))GetProcAddress(hndlIcmp,"IcmpClossHandle");
pIcmpSendEcho=(DWORD(WINAPI*)(HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD))GetProcAddress(hndlIcmp,"icmpSendEcho");
if(pIcmpCreateFile==NULL ||
pIcmpCloseHandle==NULL ||
pIcmpSendEcho==NULL)//运行到这里就停了,搞不懂,
{
fprintf(stderr,"\nError getting ICMP proc address\n");
FreeLibrary(hndlIcmp);
return;
}
//init WinSock
nRet=WSAStartup(MAKEWORD(1,1),&wsaData);
if(nRet)
{
fprintf(stderr,"\nWSAStartup() error:%d\n",nRet);
WSACleanup();
FreeLibrary(hndlIcmp);
return;
}
if(0x0101!=wsaData.wVersion )
{
fprintf(stderr,"\nWinSock versin 1.1 supported\n");
WSACleanup();
FreeLibrary(hndlIcmp);
return;
}
Dest.S_un .S_addr =inet_addr(argv[1]);
if(Dest.S_un .S_addr ==INADDR_NONE)
pHost=gethostbyname(argv[1]);
else
pHost=gethostbyaddr((const char *)&Dest ,sizeof(struct in_addr),AF_INET);
if(pHost==NULL)
{
fprintf(stderr,"\n%s not found\n",argv[1]);
WSACleanup();
FreeLibrary(hndlIcmp);
return;
}
printf("\nPinging %s[%s]",pHost->h_name ,inet_ntoa((*(LPIN_ADDR)pHost->h_addr_list [0])));
dwAddress=(DWORD*)(*pHost->h_addr_list );
hndlFile=pIcmpCreateFile();
for(x=0;x<4;x++)
{
ipInfo.Ttl =255;
ipInfo.Tos =0;
ipInfo.IPFlags =0;
ipInfo.Options =NULL;
dwRet=pIcmpSendEcho(hndlFile,
*dwAddress,
NULL,
0,
&ipInfo,
&icmpEcho,
sizeof(struct tagICMPECHO),
5000);
Dest.S_un .S_addr =icmpEcho.Source;
printf("\nReply from %s Time=%ldms TTL=%d",
inet_ntoa(Dest),
icmpEcho.RTTime,
icmpEcho.ipInfo.Ttl);
if(icmpEcho.Status)
{
printf("\nError:icmpEcho.Status=%ld",icmpEcho.Status);
break;
}
}
printf("\n");
pIcmpCloseHandle(hndlFile);
FreeLibrary(hndlIcmp);
WSACleanup();
}
请帮帮忙找出问题,
解决方案 »
- 我用windowsAPI写一个文本编辑器,怎么能够输入汉字呀?谢谢回答!!
- 网络编程,有用java的么,进来说说。
- 请问在Csdn论坛里知道一个博主的名字, 如何查找到他的博客呢
- 时间20080102131415(2008-01-02 13:14:15)如何转换为UNIX时间。
- 窗口的输入焦点
- 请问如何让rich edit的OnChange函数生效?
- ADO访问sql server数据库的问题!!!
- 如何解决CPoint 的串行化?
- 有没有方法用程序比较WORD的文件实现改卷功能
- 怎样在一个对话框上操纵另一个对话框上的控件??
- 高分求救,在线等待,请教listctrl无法显示,谢谢,原代码如下:
- 请问编程如何实现ping操作呢?windows 有api函数实现ping操作的吗?
http://www.aslike.net