1 取出ip(调用ado.net)
 2 调用ping,传入参数 ip(调用process)
 3 取出结果
 4 写入数据库

解决方案 »

  1.   

    第一步和第四步就是数据库的读写
     第二步和第三步就是调用doc命令
     ok?
      

  2.   

    第一步和第四步就是数据库的读写
     第二步和第三步就是调用doc命令
     ok?
      

  3.   

    1,将你要测试的地址写入一个表中:
    id ip
    1 192.168.0.1
    2 192.168.0.22,通过ADO.net读到Array中
    Array ar = new Array();
    whie(read.Read())
    {
    ar.Add(read.GetString(read.GetOrdinal(item)));
    }
    3,逐个ping它
    for(int i = 0 ; i < ar.Count; i++)
    PingHost (ar[i]);

    public static void PingHost(string[] hostclient)
    {
    //初始化Socket套接字
    //三个参数分别为:
    //    1。解析地址的地址模式,较常用的为AddressFamily.InterNetwork,即IPv4地址。
    //    2。Socket套接字类型,一般为SocketType.Raw原始类型。
    //    3。网络协议类型,这里Ping用的是Internet控制报文协议ProtocolType.Icmp.    
    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPHostEntry hostInfo;
    try
    {
    //解析主机IP入口
    hostInfo = Dns.GetHostByName("202.112.109.222");    
    }
    catch(Exception)
    {
    //解析主机名错误。
    Console.WriteLine("Unknown host {0}.","202.112.109.222"); 
    return ;
    }
    // 取主机0号端口
    EndPoint hostPoint= (EndPoint)new IPEndPoint(hostInfo.AddressList[0], 0);     IPHostEntry clientInfo;
    try
    {
    if (hostclient.Length==2)
    clientInfo =Dns.GetHostByName(hostclient[1]);
    else
    clientInfo = Dns.GetHostByName(Dns.GetHostName());
    }
    catch(Exception)
    {
    //解析主机名错误。
    Console.WriteLine("Unknown client {0}.",hostclient[1]); 
    return ;
    }
    // 取客户机0号端口
    //********************************注意******************************
    //这里当然可以设置为本地机或其它主机的IP,那样报文将返回到该机IP端口,
    //实际上这是黑客们惯用的手段之一,即利用报文协议来攻击远程主机
    //便是利用这样的原理,加上多个无限次的报文攻击即可时远程主机瘫痪
    //对于将本程序利用于非法的攻击活动,笔者概不负责!!!!!!!!!!!!!!!!
    //******************************************************************
    EndPoint clientPoint = (EndPoint)new IPEndPoint(clientInfo.AddressList[0], 0);         //设置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; int timeout=0 ;
    int timeConsume=0; while(true)
    {
    nBytes = socket.ReceiveFrom(ReceiveData, 256,SocketFlags.None,ref clientPoint);
    if (nBytes == -1) 
    {
    Console.WriteLine("Host not Responding") ;
    break;
    }
    else if(nBytes>0)
    {
    timeConsume = System.Environment.TickCount - startTime; 
    Console.WriteLine("Reply from "+hostPoint.ToString()+" in "
    +timeConsume+"MS :Bytes Received"+nBytes);
    break;
    }
    timeConsume=Environment.TickCount - startTime;
    if(timeout>1000)
    {
    Console.WriteLine("Time Out") ;
    break;
    }
    }
            
    //关闭套接字
    socket.Close();     
    }
    4, 你要修改上述函数 PingHost(),因为它原来是为了ping一个Host,如果多个的化,你要把初始化等部分提出来以上问题,哪一步需要进一步说明?
      

  4.   

    用pinghost()去ping一个不通的IP老死机.
      

  5.   

    取出就select
    调用ping用Process.Start()
    怎么获取结果我就不是很清楚
    然后就insert把结果写到数据库~
      

  6.   

    有没人说说怎么获取ping操作返回的结果