//设置ICMP报文
int DataSize = 32; // ICMP数据包大小;
int PacketSize = DataSize + 8;//总报文长度
const int ICMP_ECHO = 8;
IcmpPacket packet = new IcmpPacket(ICMP_ECHO,0,0,45,0,DataSize);
Byte [] Buffer = new Byte[ PacketSize ];
int index=packet.ConvertToByte(Buffer);
//报文出错
if( index != PacketSize)
{
Console.WriteLine("There is something wrong with Packet Data !");
return ;
}
int cksum_buffer_length =(int)Math.Ceiling( ((Double)index)/ 2);
UInt16 [] cksum_buffer = new UInt16[cksum_buffer_length];
int icmp_header_buffer_index = 0;
for( int i = 0; i < cksum_buffer_length; i++ )
{
//将两个byte转化为一个UInt16
cksum_buffer[i] = BitConverter.ToUInt16(Buffer,icmp_header_buffer_index);
icmp_header_buffer_index += 2;
}
//将校验和保存至报文里
packet.CheckSum =IcmpPacket.SumOfCheck(cksum_buffer);
// 保存校验和后,再次将报文转化为数据包
Byte [] SendData = new Byte[ PacketSize ];
index= packet.ConvertToByte(SendData);
//报文出错
if( index != PacketSize)
{
Console.WriteLine("There is something wrong with Packet Data !");
return ;
}
int nBytes=0;
//系统计时开始
int startTime = Environment.TickCount;
//发送数据包
if ((nBytes = socket.SendTo(SendData, PacketSize, SocketFlags.None,(EndPoint) hostPoint)) == -1)
{
Console.WriteLine("Socket can not send packet");
}
Byte [] ReceiveData = new Byte[256]; //接收数据
nBytes = 0;