资源简介
利用ICMP数据包,探测指定网段中的活动主机
代码片段和文件信息
#include“phlscanhost.h“
void main(int argcchar *argv[])
{
if(argc!=3)
{
cout<<“输入格式错误: start_ip end_ip“< return;
}
if(WSAStartup(MAKEWORD(22)&wsaData)!=0) //初始化Winsock,使用Winsock2.2版本
{ //WSAStartup()成功调用则返回0
cout<<“\nFailed to find a usable WinSock DLL error code=!\n“< ExitProcess(STATUS_FAILED);
}
//初始化套接字(使用互联网协议地址,原始套接字,该套接字使用IPPROTO_ICMP协议,
//该套接字具备重叠I/O特性)
sockRaw=WSASocket(AF_INETSOCK_RAWIPPROTO_ICMPNULL0WSA_FLAG_OVERLAPPED);
//sockRaw函数调用成功,返回新创建的套接字号,否则返回INVALID_SOCKET
//进一步调用WSAGetLastError()来获取相应的错误代码
if(sockRaw==INVALID_SOCKET)
{
cout<<“\nFailed to create the Raw socket error code=\n“< ExitProcess(STATUS_FAILED);
}
//设置套接字选项
int timeout=1000;
//sockRaw是之前创建的原始套接字,SOL_SOCKET表示使用基本套接字处理ICMP报文
//SO_RCVTIMEO表示使用接收超时设置,SO_SNDTIMEO表示使用发送超时设置
//setsockopt(sockRawSOL_SOCKETSO_SNDTIMEO(char *)&timeoutsizeof(timeout));
if(setsockopt(sockRawSOL_SOCKETSO_RCVTIMEO(char *)&timeoutsizeof(timeout))==SOCKET_ERROR)
{//判断套接口选项是否设置成功
cout<<“Failed to set recv timeout:“< ExitProcess(STATUS_FAILED);
}
if(setsockopt(sockRawSOL_SOCKETSO_SNDTIMEO(char *)&timeoutsizeof(timeout))==SOCKET_ERROR)
{//判断套接口选项是否设置成功
cout<<“Failed to set send timeout:“< ExitProcess(STATUS_FAILED);
}
memset(&dest0sizeof(dest)); //初始化目的主机
unsigned long startIPendIP; //定义开始IP和结束IP地址
dest.sin_family=AF_INET; //初始化目的主机的sockaddr_in数据结构
dest.sin_addr.s_addr=inet_addr(argv[1]); //将第一个IP地址参数赋值给目的主机IP地址
startIP=inet_addr(argv[1]); //inet_addr()用于转换点串IP地址
end.sin_family=AF_INET; //
end.sin_addr.s_addr=inet_addr(argv[2]); //最后一个IP地址
endIP=inet_addr(argv[2]); //将最后一个IP地址赋给endIP
HANDLE hThread;
while(htonl(startIP)<=htonl(endIP))
{
DWORD ThreadID;
sockaddr_in *pIPAddrTemp=new (sockaddr_in);
if(!pIPAddrTemp)
{
cout<<“memory alloc failed“< return ;
}
*pIPAddrTemp=dest;
//NUll:线程不能继承,NUll:初始堆栈大小为0,
//线程函数为FindIP,线程参数为pIPAddrTemp,线程标识为ThreadID
hThread=CreateThread(NULLNULLFindIP(LPVOID)pIPAddrTempNULL&ThreadID);
/*DWORD dwRetWFSO = WaitForSingleobject(hThread 10000);
if (dwRetWFSO= WAIT_object_0)
{
TerminateThread(hThread0);
}
else
{*/
Sleep(50); //延时100毫秒
//结束一个线程
//double i=60000000L;
//while(i--);
TerminateThread(hThread0);
//}
//初始化
memset(&from0sizeof(from));
//htonl()函数将一个无符号的长整型数转化为“Big-Endian“的网络字节序
//startIP=htonl(htonl(startIP)+1);
startIP=htonl(ntohl(startIP)+1);
//修改IP地址
dest.sin_addr.S_un.S_addr=startIP;
}
}
//填充ICMP数据报
void fill_icmp_data(char *icmp_dataint datasize)
{
IcmpHeader *icmp_hdr;
char *datapart;
icmp_hdr=(IcmpHeader*)icmp_data;
icmp_hdr->type=ICMP_ECHO; //设置ICMP数据报类型为
icmp_hdr->id=(USHORT)GetCurrentThreadId(); //设置其ID号为当前线程号
datapart=ic
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 26291 2009-06-18 00:13 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\Debug\main.obj
文件 209010 2009-06-18 00:13 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\Debug\phlscanhost.exe
文件 287056 2009-06-18 00:13 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\Debug\phlscanhost.ilk
文件 2014668 2009-06-18 00:02 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\Debug\phlscanhost.pch
文件 533504 2009-06-18 00:13 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\Debug\phlscanhost.pdb
文件 107520 2011-03-02 15:48 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\Debug\vc60.idb
文件 69632 2009-06-18 00:13 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\Debug\vc60.pdb
文件 8056 2009-06-18 00:13 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\main.cpp
文件 1021 2009-06-16 17:03 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\phlscanhost.cpp
文件 4403 2009-06-16 17:09 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\phlscanhost.dsp
文件 530 2009-06-16 17:09 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\phlscanhost.dsw
文件 1917 2009-06-18 00:02 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\phlscanhost.h
文件 50176 2011-03-02 15:55 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\phlscanhost.ncb
文件 48640 2011-03-02 15:55 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\phlscanhost.opt
文件 256 2011-03-02 15:43 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\phlscanhost.plg
文件 304128 2011-03-23 11:21 利用ICMP探测网络中活动主机程序及报告(VC ++)\课程设计报告.doc
目录 0 2011-03-23 11:24 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost\Debug
目录 0 2011-03-23 11:24 利用ICMP探测网络中活动主机程序及报告(VC ++)\phlscanhost
目录 0 2011-03-23 11:24 利用ICMP探测网络中活动主机程序及报告(VC ++)
----------- --------- ---------- ----- ----
3666808 19
- 上一篇:基础PageRank 算法 C++实现
- 下一篇:学生成绩管理系统 C、VC++
评论
共有 条评论