两条linux ping命令令 执行结果输出至同一个文档中 t.txt

您所在的位置: &
C# ping命令的实现方法:Ping类的使用
C# ping命令的实现方法:Ping类的使用
网络小筑的博客
本文介绍C# ping命令的实现方法,首先利用原始Socket套接字,实现ICMP协议,然后执行ping命令。最后,还可以使用C# 2.0中新增的Ping类来实现。
以下介绍C# ping命令的两种实现方法。
C# ping命令实现:利用原始Socket套接字,实现ICMP协议。using&S& &using&System.Collections.G& &using&System.T& &using&System.N& &using&System.Net.S& &&&namespace&PingC& &{& &&&&&class&ping& &&&&&{& &&&&&&&&&const&int&SOCKET_ERROR&=&-1;& &&&&&&&&&const&int&ICMP_ECHO&=&8;& &&&&&&&&&static&void&Main(string[]&args)& &&&&&&&&&{& &&&&&&&&&&&&&ping&p&=&new&ping();& &&&&&&&&&&&&&Console.WriteLine("请输入要&Ping&的IP或者主机名字:");& &&&&&&&&&&&&&string&MyUrl&=&Console.ReadLine();& &&&&&&&&&&&&&Console.WriteLine("正在&Ping&"&+&MyUrl&+&"&……");& &&&&&&&&&&&&&Console.Write(p.PingHost(MyUrl));& &&&&&&&&&}& &&&&&&&&&public&string&PingHost(string&host)& &&&&&&&&&{& &&&&&&&&&&&&&&&&&&&&&&&&&&IPHostEntry&ServerHE,&fromHE;& &&&&&&&&&&&&&int&nBytes&=&0;& &&&&&&&&&&&&&int&dwStart&=&0,&dwStop&=&0;& &&&&&&&&&&&&&&&&&&&&&&&&&&&Socket&socket&=& &&&&&&&&&&&&&&new&Socket(AddressFamily.InterNetwork,&SocketType.Raw,&ProtocolType.Icmp);& &&&&&&&&&&&&&socket.SetSocketOption(SocketOptionLevel.Socket,&SocketOptionName.SendTimeout,&1000);& &&&&&&&&&&&&&&&&&&&&&&&&&&try& &&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&ServerHE&=&Dns.GetHostByName(host);& &&&&&&&&&&&&&}& &&&&&&&&&&&&&catch&(Exception)& &&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&&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&=0;& &&&&&&&&&&&&&packet.Identifier&=&45;& &&&&&&&&&&&&&packet.SequenceNumber&=&0;& &&&&&&&&&&&&&int&PingData&=&24;&&&&&&&&&&&&&&packet.Data&=&new&Byte[PingData];& &&&&&&&&&&&&&&&&&&&&&&&&&&&for&(int&i&=&0;&i&&&&PingD&i++)& &&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&packet.Data[i]&=&(byte)'#';& &&&&&&&&&&&&&}& &&&&&&&&&&&&&&&&&&&&&&&&&&&PacketSize&=&32;& &&&&&&&&&&&&&Byte[]&icmp_pkt_buffer&=&new&Byte[PacketSize];& &&&&&&&&&&&&&Int32&Index&=&0;& &&&&&&&&&&&&&&&&&&&&&&&&&&Index&=&Serialize(& &&&&&&&&&&&&&&packet,& &&&&&&&&&&&&&&icmp_pkt_buffer,& &&&&&&&&&&&&&&PacketSize,& &&&&&&&&&&&&&&PingData);& &&&&&&&&&&&&&&&&&&&&&&&&&&if&(Index&==&-1)& &&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&return&"Error&Creating&Packet";& &&&&&&&&&&&&&&}& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Double&double_length&=&Convert.ToDouble(Index);& &&&&&&&&&&&&&Double&dtemp&=&Math.Ceiling(double_length&/&2);& &&&&&&&&&&&&&int&cksum_buffer_length&=&Index/2;& &&&&&&&&&&&&&&&&&&&&&&&&&&UInt16[]&cksum_buffer&=&new&UInt16[cksum_buffer_length];& &&&&&&&&&&&&&&&&&&&&&&&&&&int&icmp_header_buffer_index&=&0;& &&&&&&&&&&&&&for&(int&i&=&0;&i&&&&cksum_buffer_&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_& &&&&&&&&&&&&&&&&&&&&&&&&&&&Byte[]&sendbuf&=&new&Byte[PacketSize];& &&&&&&&&&&&&&&&&&&&&&&&&&&Index&=&Serialize(& &&&&&&&&&&&&&&packet,& &&&&&&&&&&&&&&sendbuf,& &&&&&&&&&&&&&&PacketSize,& &&&&&&&&&&&&&&PingData);& &&&&&&&&&&&&&&&&&&&&&&&&&&if&(Index&==&-1)& &&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&return&"Error&Creating&Packet";& &&&&&&&&&&&&&&}& &&&&&&&&&&&&&&dwStart&=&System.Environment.TickC&&&&&&&&&&&&&&&&&&&&&&&&&&&if&((nBytes&=&socket.SendTo(sendbuf,&PacketSize,&0,&epServer))&==&SOCKET_ERROR)& &&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&return&"Socket&Error:&cannot&send&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)& &&&&&&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&&&&&return&"主机没有响应";& &&&&&&&&&&&&&&&&&&}& &&&&&&&&&&&&&&&&&else&if&(nBytes&&&0)& &&&&&&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&&&&&dwStop&=&System.Environment.TickCount&-&dwS&&&&&&&&&&&&&&&&&&&&&&return&"Reply&from&"&+&epServer.ToString()&+&"&in&"& &&&&&&&&&&&&&&&&&&&&&+&dwStop&+&"ms.&&Received:&"&+&nBytes&+&"&Bytes.";& &&&&&&&&&&&&&&&&&&}& &&&&&&&&&&&&&&&&&timeout&=&System.Environment.TickCount&-&dwS& &&&&&&&&&&&&&&&&&if&(timeout&&&1000)& &&&&&&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&&&&&return&"超时";& &&&&&&&&&&&&&&&&&}& &&&&&&&&&&&&&}& &&&&&&&&&&&&&&&&&&&&&&&&&&&socket.Close();& &&&&&&&&&&&&&return&"";& &&&&&&&&&}& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&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.L& &&&&&&&&&&&&&&Array.Copy(b_code,&0,&Buffer,&Index,&b_code.Length);& &&&&&&&&&&&&&Index&+=&b_code.L& &&&&&&&&&&&&&&Array.Copy(b_cksum,&0,&Buffer,&Index,&b_cksum.Length);& &&&&&&&&&&&&&Index&+=&b_cksum.L& &&&&&&&&&&&&&&Array.Copy(b_id,&0,&Buffer,&Index,&b_id.Length);& &&&&&&&&&&&&&Index&+=&b_id.L& &&&&&&&&&&&&&&Array.Copy(b_seq,&0,&Buffer,&Index,&b_seq.Length);& &&&&&&&&&&&&&Index&+=&b_seq.L& &&&&&&&&&&&&&&&&&&&&&&&&&&&Array.Copy(packet.Data,&0,&Buffer,&Index,&PingData);& &&&&&&&&&&&&&Index&+=&PingD& &&&&&&&&&&&&&if&(Index&!=&PacketSize)& &&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&cbReturn&=&-1;& &&&&&&&&&&&&&&&&&return&cbR& &&&&&&&&&&&&&}& &&&&&&&&&&&&&&cbReturn&=&I& &&&&&&&&&&&&&return&cbR& &&&&&&&&&}& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&public&static&UInt16&checksum(UInt16[]&buffer,&int&size)& &&&&&&&&&{& &&&&&&&&&&&&&Int32&cksum&=&0;& &&&&&&&&&&&&&int&& &&&&&&&&&&&&&counter&=&0;& &&&&&&&&&&&&&&while&(size&&&0)& &&&&&&&&&&&&&{& &&&&&&&&&&&&&&&&&UInt16&val&=&buffer[counter];& &&&&&&&&&&&&&&&&&&cksum&+=&buffer[counter];& &&&&&&&&&&&&&&&&&counter&+=&1;& &&&&&&&&&&&&&&&&&size&-=&1;& &&&&&&&&&&&&&}& &&&&&&&&&&&&&&cksum&=&(cksum&&&&16)&+&(cksum&&&0xffff);& &&&&&&&&&&&&&cksum&+=&(cksum&&&&16);& &&&&&&&&&&&&&return&(UInt16)(~cksum);& &&&&&&&&&}& &&&&&}& &&&&&&&&&&&&&&&&&&&&&&&&&public&class&IcmpPacket& &&&&&{& &&&&&&&&&public&Byte&T&&&&&&&&&&&&&public&Byte&SubC&&&&&&&&&&&&&public&UInt16&CheckS&&&&&&&&&&&&public&UInt16&I&&&&&&&&&&&&&&&public&UInt16&SequenceN&&&&&&&&&&&&&&public&Byte[]&D& &&&&&&}&&&}& &
C# ping命令执行:执行ping命令
首先,我们用使用Process类,来创建独立的进程,导入System.Diagnostics,
using System.D
实例一个Process类,启动一个独立进程
Process p = new Process();
Process类有一个StartInfo属性,这个是ProcessStartInfo类,包括了一些属性和方法,
下面我们用到了他的几个属性:
设定程序名
p.StartInfo.FileName = "cmd.exe";
关闭Shell的使用
p.StartInfo.UseShellExecute =
重定向标准输入
p.StartInfo.RedirectStandardInput =
重定向标准输出
p.StartInfo.RedirectStandardOutput =
重定向错误输出
p.StartInfo.RedirectStandardError =
设置不显示窗口
p.StartInfo.CreateNoWindow =
上面几个属性的设置是比较关键的一步。
既然都设置好了那就启动进程吧,
p.Start();
输入要执行的命令,这里就是ping了,
p.StandardInput.WriteLine("ping -n 1 ");
p.StandardInput.WriteLine("exit");
从输出流获取命令执行结果,
string strRst = p.StandardOutput.ReadToEnd();
C# ping命令实现:利用c#2.0新增的Ping类
这里我写的是一个窗体程序。首先添加textbox,listbox,button控件,其中textbox录入域名或IP,listbox显示结果.
在button1_click事件键入private&void&button1_Click(object&sender,&EventArgs&e)& &{& &&&&&Ping&p1&=&new&Ping();&&&&&&PingReply&reply&=&p1.Send(this.textBox1.Text);&&&&&displayReply(reply);&&&}& &&private&void&displayReply(PingReply&reply)&&{& &&&&&StringBuilder&sbuilder&;& &&&&&if&(reply.Status&==&IPStatus.Success)& &&&&&{& &&&&&&&&&sbuilder&=&new&StringBuilder();& &&&&&&&&&sbuilder.Append(string.Format("Address:&{0}&",&reply.Address.ToString&()));& &&&&&&&&&sbuilder.Append(string.Format("RoundTrip&time:&{0}&",&reply.RoundtripTime));& &&&&&&&&&sbuilder.Append(string.Format("Time&to&live:&{0}&",&reply.Options.Ttl));& &&&&&&&&&sbuilder.Append(string.Format("Don't&fragment:&{0}&",&reply.Options.DontFragment));& &&&&&&&&&sbuilder.Append(string.Format("Buffer&size:&{0}&",&reply.Buffer.Length));& &&&&&&&&&listBox1.Items.Add(sbuilder.ToString());& &&&&&}& &&} &
也可以做异步的处理,修改button1_click,并添加PingCompletedCallBack方法private&void&button1_Click(object&sender,&EventArgs&e)& &{& &&&&&Ping&p1&=&new&Ping();& &&&&&p1.PingCompleted&+=&new&PingCompletedEventHandler(this.PingCompletedCallBack);&&&&&p1.SendAsync(this.textBox1.Text,&null);& &} &&private&void&PingCompletedCallBack(object&sender,&PingCompletedEventArgs&e)& &{& &&&&&if&(e.Cancelled)& &&&&&{& &&&&&&&&&listBox1.Items.Add("Ping&Canncel");& &&&&&&&&&return;& &&&&&}& &&&&&if&(e.Error&!=&null)& &&&&&{& &&&&&&&&&listBox1.Items.Add(e.Error.Message);& &&&&&&&&&return;& &&&&&&}& &&&&&StringBuilder&& &&&&&PingReply&reply&=&e.R& &&&&&if&(reply.Status&==&IPStatus.Success)& &&&&&{& &&&&&&&&&sbuilder&=&new&StringBuilder();& &&&&&&&&&sbuilder.Append(string.Format("Address:&{0}&",&reply.Address.ToString()));& &&&&&&&&&sbuilder.Append(string.Format("RoundTrip&time:&{0}&",&reply.RoundtripTime));& &&&&&&&&&sbuilder.Append(string.Format("Time&to&live:&{0}&",&reply.Options.Ttl));& &&&&&&&&&sbuilder.Append(string.Format("Don't&fragment:&{0}&",&reply.Options.DontFragment));& &&&&&&&&&sbuilder.Append(string.Format("Buffer&size:&{0}&",&reply.Buffer.Length));& &&&&&&&&&listBox1.Items.Add(sbuilder.ToString());& &&&&&&}& &} &
怎么样,相比1、2方式,3是不是简单的多呀。
本文来自网络小筑的博客:《c#下实现ping操作》。
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
Angular.js 是一个MV*(Model-View-Whatever,不管是MVC或者MVVM
本次的专刊为大家提供了Oracle最新推出的Java SE 8详细的开发教程,从解读到探究Java 8最新
互联网一大真理便是,有痛点的地方就有机会。现在最想
Eclipse 是一个开源的、可扩展的集成开发环境。平台本
这个架构是从我近期在做的一个项目中剥离出来的,这个
本书论述了软件开发价值增加的思维方式。这一思维方式构成了VSTS的基础,包括VSTS的指导思想,为什么这些指导思想会以某些方式表
51CTO旗下网站[转载]ping的批处理文件编写
做为一名网络工程师,经常要测试某地网络的好坏,而最直接的命令就是ping,但是一次ping好多天,而且每隔一段时间就要ping和tracert,使工作繁琐麻烦,所以就需要学习一些简单的批处理了。
下面跟懒人简单介绍一下ping的批处理文件编写。
首先,在电脑的任一个地方,(我习惯在桌面)新建一个文本文档,打开之后写入下面语句
date/t &&c:test.txt
&(显示日期,并重定向写入到c盘下text.txt下)
time/t &&c:test.txt
&(显示时间,并重定向写入到c盘下text.txt下)
ping -n 50 192.168.1.1
&&c:test.txt
&(执行ping命令,ping地址192.168.1.1总共50个包,然后写入c盘下test.txt文件中)
tracert 192.168.1.1
&&c:test.txt (执行tracert命令,tracert地址192.168.1.1,并写入c盘下的test.txt文件中)
然后,写入以上简单的命令后保存退出,并重命名刚才的文本文档,要以后缀名bat结尾(注:该文件不要重命名为ping.bat,否则容易陷入DOS循环。原因:DOS内部命令与批文件重名,会陷入DOS循环)
那如何让批处理文件每隔一定的时间执行一次呢!
只需要在用GOTO和:即可;举例如下:
ping 192.168.1.1
&&c:test.txt
ping -n 60
127.1&nul&goto
(其中goto就是跳转的意思,60就是大约60秒;大概的意思应该就是执行ping命令,执行完60秒以后重新跳转到开始继续执行ping命令,其中60秒的时间可以修改)
大家都知道如果ping某个地址50个包,然后重定向到文本中,从文本查看的时候,我们有时只需要查看丢包率和延时,其中50个包的往返信息都没用,如何将那些没用的信息去掉呢!
下面需要用到管道符|和find命令;还是举例如下:
ping 192.168.1.1
|find /v "Request timed out"|find /v "Reply
from"&&c:test.txt
(其中管道符|的意思是将上一命令执行的结果传递给下一命令去处理;find是查找的意思,/v是find的参数,意思是显示所有未包含指定字符串的行,其中find还有其他参数如下
/V 显示所有未包含指定字符串的行。 /C 仅显示包含字符串的行数。 /N 显示行号。 /I
搜索字符串时忽略大小写。 /OFF[LINE]
不要跳过具有脱机属性集的文件。
上面一句总的意思是将ping
192.168.1.1输出的结果剔除有Request timed
out和Reply
from的行,再将结果保存到test.txt文件中)
下面写一个简单的批处理文件供大家参考
@echo off :main date/t
&&d:a.txt time/t
&&d:t.txt time/t
&&d:t.txt ping -n 5 192.168.100.1
|find /v "Request timed out"|find /v "Reply
from"&&d:a.txt tracert 192.168.100.2
&&d:t.txt echo
--------------------------------------------------------------------------------
&&d:a.txt echo
--------------------------------------------------------------------------------
&&d:t.txt ping -n 3600
127.1&nul&goto main
接下来再给同行介绍一个ping某一地址段的批处理文件:
for /l %p in (1,1,101) do
@ping 192.168.0.%p -n 1
&&c:test.txt
意思是:ping192.168.0段的地址,从192.168.0.1开始ping,每隔1个IPping一个包,一直ping到192.168.0.101,然后将结果保存到c盘下的test.txt文件中。
以上为学习中的简单总结,希望能帮到同行们,如有问题请留言。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。大神,请教下,如何写一个ping命令的程序,如果ping通,即是否认为ttl=64的话就执行本机电脑的txt文本。_百度知道
大神,请教下,如何写一个ping命令的程序,如果ping通,即是否认为ttl=64的话就执行本机电脑的txt文本。
不是的,ttl=64跟您用的电脑操作系统和发送数据包经过的路由器多少有关。这个数值是数据包的生存时间,并不指执行什么文件。
其他类似问题
ttl的相关知识
按默认排序
其他1条回答
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求一个在XP中双击即可运行“ping 202.96.134.134 -t”的命令_百度知道
提问者采纳
简直太简单了桌面 新建文本文档
ping 202.96.134.134 -t保存为bat文件例如
ping.bat就可以了 验证可行注意文本文档里面只有ping 202.96.134.134 -t还有,一定要保存为BAT文件或者改完了修改扩展名为BAT
提问者评价
奇怪了,昨天我在家里的电脑上也是这么搞的,死活都不行,今天到了公司电脑上就可以了,太奇怪了
其他类似问题
ping的相关知识
其他3条回答
打开记事本输入”ping 202.96.134.134 -t“单击”文件”-“保存”输入文件名为“ping1.bat”保存到桌面需要时双击就可以了。
参考资料:
批处理文件必须以 &.bat&结束。
新建个P.TXT文件,内容中写入:ping 202.96.124.134 -t保存退出。将P.TXT的扩展名改为P.BAT,在开始--运行--输入CMD,在黑屏提示符下直接输入P,回车即可。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁同一台PC两个不同ip地址互相ping的命令是什么?_百度知道
同一台PC两个不同ip地址互相ping的命令是什么?
比方说在同一个PC上配置了两个IP地址,一个是192.11.6.11,一个是192.11.6.5?
不同网段没有路由是ping不通的,通了话会有类似以下内容:Reply from 127.0.0.1: bytes=32 time&1ms TTL=128Reply from 127.0.0.1: bytes=32 time&1ms TTL=128Reply from 127.0.0.1: bytes=32 time&1ms TTL=128不通就有类似以下的内容:Request timed out.
我是问命令怎么敲,咱一边敲命令就是ping X.X.X.X现在我是想让两个Ip之间互相ping
其他类似问题
ping的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 ping命令 的文章

 

随机推荐