怎样ping从数据库中取的机器IP,并将结果存入数据存入数据库? 1 取出ip(调用ado.net) 2 调用ping,传入参数 ip(调用process) 3 取出结果 4 写入数据库 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 第一步和第四步就是数据库的读写 第二步和第三步就是调用doc命令 ok? 第一步和第四步就是数据库的读写 第二步和第三步就是调用doc命令 ok? 1,将你要测试的地址写入一个表中:id ip1 192.168.0.12 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,如果多个的化,你要把初始化等部分提出来以上问题,哪一步需要进一步说明? 用pinghost()去ping一个不通的IP老死机. 取出就select调用ping用Process.Start()怎么获取结果我就不是很清楚然后就insert把结果写到数据库~ 有没人说说怎么获取ping操作返回的结果 求C#大神解释一下这道题 关于使用new关键字修饰. c#求助....... c#操作access,使用哪种数据类型存储大数值? 在Repeater的ItemCommand事件中如何获取对应的那行记录的值? itextsharp生成pdf后的直接打印问题 打字练习的实现 DataList 如何每三条数据用虚线分隔 请问:EventArgs怎么传递非Empty参数?? 关于XML WEB Service运行出错问题! html to xml C#中如何获取两个DateTime所间隔的星期 简单问题!可给分!
第二步和第三步就是调用doc命令
ok?
第二步和第三步就是调用doc命令
ok?
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,如果多个的化,你要把初始化等部分提出来以上问题,哪一步需要进一步说明?
调用ping用Process.Start()
怎么获取结果我就不是很清楚
然后就insert把结果写到数据库~