怎样ping从数据库中取的机器IP,并将结果存入数据存入数据库?

hostage 2003-08-01 09:21:21
怎样ping从数据库中取的机器IP,并将结果存入数据存入数据库?
...全文
216 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kuangren 2003-10-01
  • 打赏
  • 举报
回复
有没人说说怎么获取ping操作返回的结果
kuangren 2003-10-01
  • 打赏
  • 举报
回复
取出就select
调用ping用Process.Start()
怎么获取结果我就不是很清楚
然后就insert把结果写到数据库~
chinawn 2003-10-01
  • 打赏
  • 举报
回复
收藏
startprograming 2003-09-09
  • 打赏
  • 举报
回复
用pinghost()去ping一个不通的IP老死机.
RnfShadow 2003-08-18
  • 打赏
  • 举报
回复
gz
brightheroes 2003-08-01
  • 打赏
  • 举报
回复
第一步第四步是数据库的读写
第二步第三步是调用命令行参数
gujianxin 2003-08-01
  • 打赏
  • 举报
回复
1,将你要测试的地址写入一个表中:
id ip
1 192.168.0.1
2 192.168.0.2

2,通过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,如果多个的化,你要把初始化等部分提出来

以上问题,哪一步需要进一步说明?
brightheroes 2003-08-01
  • 打赏
  • 举报
回复
第一步和第四步就是数据库的读写
第二步和第三步就是调用doc命令
ok?
brightheroes 2003-08-01
  • 打赏
  • 举报
回复
第一步和第四步就是数据库的读写
第二步和第三步就是调用doc命令
ok?
brightheroes 2003-08-01
  • 打赏
  • 举报
回复
1 取出ip(调用ado.net)
2 调用ping,传入参数 ip(调用process)
3 取出结果
4 写入数据库
qimini 2003-08-01
  • 打赏
  • 举报
回复
?

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧