1123 检查主机在线的代码
来源:互联网 发布:软件开发 招标网站 编辑:程序博客网 时间:2024/05/17 04:46
BOOL CheckHostStatus(CString &strIPAddr)
{
char destip[20] ;
sprintf(destip,"%s",strIPAddr.GetBuffer(strIPAddr.GetLength()));
//定义变量
SOCKET m_hSocket;
SOCKADDR_IN m_addrDest;
SOCKADDR_IN m_addrFrom;
char *icmp_data;
char *recvbuf;
USHORT seq_no ;
char *lpdest;
int datasize;
BOOL m_bRecordRout;
int timeout;
int recvicmpnum;
int ret = 0;
//初始化变量
icmp_data = NULL;
seq_no = 0;
recvbuf = NULL;
m_bRecordRout = FALSE;
lpdest = NULL;
datasize = DEF_PACKET_SIZE;
m_hSocket = INVALID_SOCKET;
recvicmpnum = 0;
//初始化套接字
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
return 0;
}
m_bRecordRout = FALSE;
lpdest = destip;
m_hSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
if (m_hSocket == INVALID_SOCKET)
{
return FALSE ;
}
timeout = 100;
ret = setsockopt(m_hSocket, SOL_SOCKET, SO_RCVTIMEO,
(char*)&timeout, sizeof(timeout));
if(ret == SOCKET_ERROR)
{
if (m_hSocket != INVALID_SOCKET) {
closesocket(m_hSocket);
}
return FALSE;
}
ret = setsockopt(m_hSocket, SOL_SOCKET, SO_SNDTIMEO,
(char*)&timeout, sizeof(timeout));
if (ret == SOCKET_ERROR)
{
if (m_hSocket != INVALID_SOCKET) {
closesocket(m_hSocket);
}
return FALSE;
}
memset(&m_addrDest, 0, sizeof(m_addrDest));
m_addrDest.sin_family = AF_INET;
if ((m_addrDest.sin_addr.s_addr = inet_addr(lpdest)) == INADDR_NONE)
{
if (m_hSocket != INVALID_SOCKET) {
closesocket(m_hSocket);
}
return FALSE;
}
//
// Create the ICMP packet
//
datasize += sizeof(IcmpHeader);
icmp_data =(char*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,MAX_PACKET);
if (!icmp_data)
{
if (m_hSocket != INVALID_SOCKET) {
closesocket(m_hSocket);
}
return FALSE;
}
recvbuf =(char*) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,MAX_PACKET);
if (!recvbuf)
{
if (m_hSocket != INVALID_SOCKET) {
closesocket(m_hSocket);
}
return FALSE;
}
memset(icmp_data,0,MAX_PACKET);
//重要函数,填充ICMP包头
FillICMPData(icmp_data,datasize);
((IcmpHeader*)icmp_data)->i_cksum = 0;
((IcmpHeader*)icmp_data)->timestamp = GetTickCount();
((IcmpHeader*)icmp_data)->i_seq = seq_no++;
((IcmpHeader*)icmp_data)->i_cksum = CheckSum((USHORT*)icmp_data, datasize);
DWORD time=GetTickCount();
ret = sendto(m_hSocket, icmp_data, datasize, 0,
(struct sockaddr*)&m_addrDest, sizeof(m_addrDest));
if (ret == SOCKET_ERROR)
{
if (m_hSocket != INVALID_SOCKET) {
closesocket(m_hSocket);
}
HeapFree(GetProcessHeap(), 0, recvbuf );
HeapFree(GetProcessHeap(), 0, icmp_data);
WSACleanup();
return FALSE;
}
int fromlen = sizeof(m_addrFrom);
time= GetTickCount();
ret = recvfrom(m_hSocket, recvbuf, MAX_PACKET, 0,
(struct sockaddr*)&m_addrFrom, &fromlen);
if (ret == SOCKET_ERROR)
{
if (m_hSocket != INVALID_SOCKET) {
closesocket(m_hSocket);
}
HeapFree(GetProcessHeap(), 0, recvbuf );
HeapFree(GetProcessHeap(), 0, icmp_data);
WSACleanup();
return FALSE;
}
if (m_hSocket != INVALID_SOCKET) {
closesocket(m_hSocket);
}
HeapFree(GetProcessHeap(), 0, recvbuf );
HeapFree(GetProcessHeap(), 0, icmp_data);
return TRUE;
}
- 1123 检查主机在线的代码
- Varnish后端主机的健康状态检查
- Varnish后端主机的健康状态检查
- Varnish后端主机的健康状态检查
- 代码的静态检查
- 简单的实在在线检查js net
- 检查局域网存活主机
- 禁用 SSH 远程主机的公钥检查
- 禁用 SSH 远程主机的公钥检查
- 禁用 SSH 远程主机的公钥检查
- 代码检查的错误列表
- 提交表单的检查代码
- 编译器对代码的检查
- 检查网页代码的错误
- 多线程扫描在线主机
- 在线语法检查
- linux: 查询局域网内在线的主机ip
- 查找在线主机的 IP 地址,让对方无处遁形!
- Oracle分页存储过程及java的具体调用方法
- struts-config.xml中配置连接池
- Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍
- 我的异常网 -异常汇总2009-11-23
- 我的异常网 -异常汇总2009-11-23
- 1123 检查主机在线的代码
- 网络游戏服务器端网络引擎的研究与实现
- 大学生必须知道的网站
- VS2008/2010在64位Windows平台上编译ArcEngine导致HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)错误的解决办法。
- build and install openssl with vc++
- C# 现成能用的字符串加密、解密函数
- 《LoadRunner 没有告诉你的》之一
- 关于创新的浅薄思考 From:天涯海阁 『http://www.web20share.com/』
- 游戏开发流程和部分分工