//检查网络连接
public static string CmdPing(string _strHost)
{
string m_strHost = _strHost;
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
string pingrst = string.Empty;
process.StartInfo.Arguments = "ping " + m_strHost + " -n 1";
process.Start();
process.StandardInput.AutoFlush = true;
string temp = "ping " + m_strHost + " -n 1" ;
process.StandardInput.WriteLine(temp);
process.StandardInput.WriteLine("exit");
string strRst = process.StandardOutput.ReadToEnd();
if(strRst.IndexOf("(0% loss)")!=-1)
pingrst = "连接";
else if( strRst.IndexOf("Destination host unreachable.")!=-1)
pingrst = "无法到达目的主机";
else if(strRst.IndexOf("Request timed out.")!=-1)
pingrst = "超时";
else if(strRst.IndexOf("Unknown host")!=-1)
pingrst = "无法解析主机";
else
pingrst = strRst;
process.Close(); return pingrst ;
}
另参考:http://community.csdn.net/Expert/topic/3418/3418954.xml?temp=.1656153
public static string CmdPing(string _strHost)
{
string m_strHost = _strHost;
Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
string pingrst = string.Empty;
process.StartInfo.Arguments = "ping " + m_strHost + " -n 1";
process.Start();
process.StandardInput.AutoFlush = true;
string temp = "ping " + m_strHost + " -n 1" ;
process.StandardInput.WriteLine(temp);
process.StandardInput.WriteLine("exit");
string strRst = process.StandardOutput.ReadToEnd();
if(strRst.IndexOf("(0% loss)")!=-1)
pingrst = "连接";
else if( strRst.IndexOf("Destination host unreachable.")!=-1)
pingrst = "无法到达目的主机";
else if(strRst.IndexOf("Request timed out.")!=-1)
pingrst = "超时";
else if(strRst.IndexOf("Unknown host")!=-1)
pingrst = "无法解析主机";
else
pingrst = strRst;
process.Close(); return pingrst ;
}
另参考:http://community.csdn.net/Expert/topic/3418/3418954.xml?temp=.1656153
解决方案 »
- C#可以模拟键盘操作不?
- 请问,这个原子操作,不对呢
- datagridview中写了click事件代码,但是设计时双击表格,还是默认编辑 cellcontentclick 事件?
- 窗口缩放问题!
- 动态添加Menu控件的节点 求教!
- 关于把人才网的应聘信息导入到数据库中
- Textbox 的计算
- 高分求获取网页验证码的源码!希望高手帮忙
- 在Form1里放一个在Form1里放一个button,一个Timer在初始化时就开始计时,当按下button时停止计时并把剩余的时间传递到Form2上并继续计时
- 各位大虾,微软专家,谁能详细讲述一下如何控制线程启动的个数,有哪些方法呢(回答既送分)
- 请问动态添加的Form如何命名?
- winForm中如何取得dataGrid排序的那个箭头的值?
using System;
using System.Net;
using System.Net.Sockets;namespace ConsoleApplicationWinPing
{
/// <summary>
/// Ping 的摘要说明。
/// </summary>
class Ping
{ const int SOCKET_ERROR = -1;
const int ICMP_ECHO = 8;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] arvs)
{
string[] args = new string[1];
args[0] = "192.168.1.154";
if(args.Length == 0)
{
System.Console.WriteLine("用法:Ping <hostname> /r");
System.Console.WriteLine("<hostname> 你要测试的远程主机");
System.Console.WriteLine("/r 选项开关,如果要连续测试时使用"); }
else if(args.Length == 1)
{
PingHost(args[0]);
System.Console.ReadLine(); }
else if(args.Length == 2)
{
if(args[1] == "/r")
{
while(true)
{
PingHost(args[0]);
}
}
else
{
PingHost(args[0]);
}
}
else
{
System.Console.WriteLine("Error in Arguments");
}
}
public static UInt16 checksum(UInt16[] buffer,int size)
{
Int32 cksum = 0;
int counter = 0;
while (size>0)
{
UInt16 val = buffer[counter];
cksum += Convert.ToInt32(buffer[counter]);
counter++;
size--;
} cksum = (cksum >> 16)+(cksum & 0xffff);
cksum += (cksum >> 16);
return (UInt16)(~cksum); }
public static Int32 Serialize( IcmpPacket packet,Byte[] Buffer,Int32 PacketSize,Int32 PingData)
{
Int32 cbReturn = 0;
int Index = 0;
Byte[] b_type = new Byte[1];
b_type[0] = (packet.Type); Byte[] b_code = new Byte[1];
b_code[0] = (packet.SubCode); Byte[] b_cksum = BitConverter.GetBytes(packet.CheckSum);
Byte[] b_id = BitConverter.GetBytes(packet.Identifier);
Byte[] b_seq = BitConverter.GetBytes(packet.SequenceNumber); Array.Copy(b_type,0,Buffer,Index,b_type.Length);
Index += b_type.Length; Array.Copy(b_code,0,Buffer,Index,b_code.Length);
Index += b_code.Length; Array.Copy(b_cksum,0,Buffer,Index,b_cksum.Length);
Index += b_cksum.Length; Array.Copy(b_id,0,Buffer,Index,b_id.Length);
Index += b_id.Length; Array.Copy(b_seq,0,Buffer,Index,b_seq.Length);
Index += b_seq.Length; Array.Copy(packet.Data,0,Buffer,Index,PingData);
Index += PingData; if(Index != PacketSize)
{
cbReturn = -1;
return cbReturn;
}
cbReturn = Index;
return cbReturn;
}
public static void PingHost(string host)
{
IPHostEntry serverHE,fromHE;
int nBytes = 0;
int dwStart = 0;
int dwStop = 0; Socket socket = new Socket(AddressFamily.InterNetwork,SocketType.Raw,ProtocolType.Icmp); try
{
serverHE = Dns.GetHostByName(host);
}
catch(Exception)
{
System.Console.WriteLine("目标主机不存在");
return;
} IPEndPoint ipepServer = new IPEndPoint(serverHE.AddressList[0],0);
EndPoint epServer = (ipepServer); fromHE = Dns.GetHostByName(Dns.GetHostName());
IPEndPoint ipEndPointFrom = new IPEndPoint(fromHE.AddressList[0],0);
EndPoint EndPointFrom = (ipEndPointFrom); int PacketSize = 0;
IcmpPacket packet = new IcmpPacket(); packet.Type = ICMP_ECHO;
packet.SubCode = 0;
packet.CheckSum = UInt16.Parse("0");
packet.Identifier = UInt16.Parse("45");
packet.SequenceNumber = UInt16.Parse("0"); int PingData = 32;
packet.Data = new Byte[PingData]; for(int i=0;i<PingData;i++)
{
packet.Data[i] = (byte)'#';
} PacketSize = PingData + 8; Byte[] icmp_pkt_buffer = new Byte[PacketSize]; Int32 Index = 0; Index = Serialize(packet,icmp_pkt_buffer,PacketSize,PingData); if(Index == -1)
{
System.Console.WriteLine("Error in Making Packet");
return;
} Double double_length = Convert.ToDouble(Index);
Double dtemp = Math.Ceiling(double_length/2);
int cksum_buffer_length = Convert.ToInt32(dtemp); UInt16[] cksum_buffer = new UInt16[cksum_buffer_length]; int icmp_header_buffer_index = 0;
for(int i=0;i<cksum_buffer_length;i++)
{
cksum_buffer[i] = BitConverter.ToUInt16(icmp_pkt_buffer,icmp_header_buffer_index);
icmp_header_buffer_index += 2;
} UInt16 u_cksum = checksum(cksum_buffer,cksum_buffer_length); packet.CheckSum = u_cksum; Byte[] sendbuf = new Byte[PacketSize];
Index = Serialize(packet,sendbuf,PacketSize,PingData); if(Index == -1)
{
System.Console.WriteLine("Error in Making Packet");
return;
} dwStart = System.Environment.TickCount; if((nBytes = socket.SendTo(sendbuf,PacketSize,0,epServer)) == SOCKET_ERROR)
{
System.Console.WriteLine("Socket Error can not Sending Packet");
} Byte[] ReceiveBuffer = new Byte[256];
nBytes = 0; bool recd = false;
int timeout = 0; while(!recd)
{
nBytes = socket.ReceiveFrom(ReceiveBuffer,256,0,ref EndPointFrom);
if(nBytes == SOCKET_ERROR)
{
System.Console.WriteLine("Host not Responding");
recd = true;
break;
}
else if(nBytes > 0)
{
dwStop = System.Environment.TickCount - dwStart;
Console.WriteLine("Reply from"+epServer.ToString()+":bytes = "+ nBytes.ToString()+"time = "+dwStop +"ms");
recd = true;
break;
} timeout = System.Environment.TickCount - dwStart;
if(timeout > 1000)
{
System.Console.WriteLine("Time Out");
recd = true;
}
}
socket.Close();
}
} /// <summary>
/// IcmpPacket 的摘要说明。
/// </summary>
public class IcmpPacket
{
public IcmpPacket()
{
//
// TODO: 在此处添加构造函数逻辑
//
} public Byte Type;
public Byte SubCode;
public UInt16 CheckSum;
public UInt16 Identifier;
public UInt16 SequenceNumber;
public Byte[] Data;
}
}
{
string m_strHost = _strHost;Process process = new Process();
process.StartInfo.FileName = "cmd.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardInput = true;
process.StartInfo.RedirectStandardOutput = true;
process.StartInfo.RedirectStandardError = true;
process.StartInfo.CreateNoWindow = true;
string pingrst = string.Empty;
process.StartInfo.Arguments = "ping " + m_strHost + " -n 1";
process.Start();
process.StandardInput.AutoFlush = true;
string temp = "ping " + m_strHost + " -n 1" ;
process.StandardInput.WriteLine(temp);
process.StandardInput.WriteLine("exit");
string strRst = process.StandardOutput.ReadToEnd();
if(strRst.IndexOf("(0% loss)")!=-1)
pingrst = "连接";
else if( strRst.IndexOf("Destination host unreachable.")!=-1)
pingrst = "无法到达目的主机";
else if(strRst.IndexOf("Request timed out.")!=-1)
pingrst = "超时";
else if(strRst.IndexOf("Unknown host")!=-1)
pingrst = "无法解析主机";
else
pingrst = strRst;
process.Close();return pingrst ;
}