计算机网络课程设计代码程序.doc
文本预览下载声明
六、程序代码
● 文件scanhost.h
#pragma pack(4)
#pragma comment (lib,”Ws2_32.lib”)
#define WIN32_LEAN_AND_MEAN
#include winsock2.h
#include stdio.h
#include stdlib.h
#include iostream.h
#include stdio.h
#include sys/timeb.h
#include time.h
/* The IP header */
Typedef struct iphdr {
unsigned int headlen:4; //IP头长度
unsigned int version:4; //IP版本号
unsigned char tos; //服务类型
unsigned short totallen; //IP包总长度
unsigned short id; //ID号
unsigned short flag; //标记
unsigned char ttl; //生存时间
unsigned char prot; //协议(UDP TCP)
unsigned short checksum; //校验和
unsigned int sourceIP; //源IP
unsigned int destIP; //目的IP
}IpHeader;
//ICMP header
Typedef struct icmphdr {
BYTE type; //ICMP类型码,回送请求的类型码为8
BYTE code; //子类型码,保存与特定ICMP报文类型相关的细节信息
USHORT checksum; //校验和
USHORT id; //ICMP报文ID号
USHORT seq; //ICMP数据报的序列号
}IcmpHeader;
#define ICMP_ECHO 8 //请求回送
#define ICMP_ECHO_REPLY 0 //请求回应
#define ICMP_MIN 8 //ICMP包头长度(最小ICMP包长度)
#define STATUS_FAILED 0xFFFF //错误码
#define DEF_PACKET_SIZE 32 //缺省数据报长度
#define MAX_PACKET 1024 //最大数据块长度
//最大接收数据包长度
#define MAX_PING_PACKET_SIZE(MAX_PACKET+sizeof(IpHeader))
void fill_icmp_data(char *,int); //填充ICMP包
USHORT checksum(USHORT *,int); //校验和函数
void decode_resp(char *,int,struct sockaddr_in *); //找到此数据报IP地址
DWORD WINAPI FindIP(LPVOID pIPAddrTemp); //线程调用子函数
文件:scanhost.cpp
#include “scanhost.h”
WSADATA wsaData; //原始套接字
SOCKET sockRaw; //dest:搜索目的IP,from:接收ICMP包的源IP
Struct sockaddr_in dest,from,end; //end:搜索终止IP,即输入第三个参数
int fromlen = sizeof(from); //接收ICMP包长度
char *recvbuf=new char[MAX_PING_PACKET_SIZE]; //接受ICMP包缓冲区
unsigned int addr=0; //IP地址
long ThreadNumCounter=0,ThreadNumLimit
显示全部