C#程序探测未知网络环境的神操作
对一个网段范围内的计算机的在线状态进行【数据采集】、【数据挖掘(分析、加工处理)】,最终得到所有在线计算机的数据。技术范围涉及:①命令行工具ping、find ②记事本 ③Excel电子表格软件 ④wps文字处理软件 ⑤VS编程
文章目录
- 情景描述
- 一、远程连接的正确手势
- 二、探测远程的计算机是否在线可用Ping
- 1.使用网络Ping命令可以判断一台计算机存在。
- 2.批处理ping 172.20.21.1~172.20.21.253
- (1)使用Excel生成Ping命令行
- (2)导出Ping命令行到文本文件
- (3)修改pingBatch.txt文件扩展名为.bat
- (4)在命令窗口可按Ctrl+C中断批处理执行
- (5)改进Ping命令,优化效率
- (6)改进pingBatch.bat文件内容
- (7)使用重定向符【 > 】修改命令输出
- (8)查看重定向文件:result.txt
- (9)把重定向符号由【>】改成【>>】
- (10)用wps再次修改pingBatch.bat
- (11)查找替换的结果
- (12)重新执行pingBatch.bat文件
- (13)用Find命令过滤结果文件result.txt
- (14)Find命令的用法
- 三、使用C#编程来完成这个功能
- 1.程序代码(控制台程序)如下
- 2.程序执行直接得到结果文件
- 总结
情景描述
朋友A君是教师,在机房上课时需要远程连接办公室笔记本,但笔记本的IP是动态获取的。知道IP地址范围:172.20.21.1~172.20.21.254,网关:172.20.21.254,怎么才能快速地查到自己计算机的IP地址呢?
一、远程连接的正确手势
如果一个个的试,需要使用命令:
正常的情况如下:
错误的情况如下:
这种方式运气不好的情况,需要作253次远程连接操作,需要大量的时间作测试,显然不是最好的方式。
下面就把A君的解决方法呈现一下。
二、探测远程的计算机是否在线可用Ping
1.使用网络Ping命令可以判断一台计算机存在。
这是最初的一个想法:
这是Ping不通的,原因可能是计算机不存在,也可能开了防火墙,是防Ping的,但由于A君是关防火墙的。所以这个因素可以不考虑。
下面的是能正常Ping通的情况:
这台计算机如果Ping通,那么就可以作下一步的远程测试目标了。
c:\>mstsc /v:172.20.21.43
2.批处理ping 172.20.21.1~172.20.21.253
单独一行行ping这个范围也需要很多时间(手工操作效率很低)。就考虑生成批处理。
(1)使用Excel生成Ping命令行
(2)导出Ping命令行到文本文件
(3)修改pingBatch.txt文件扩展名为.bat
文件修改后,双击执行pingBatch.bat
(4)在命令窗口可按Ctrl+C中断批处理执行
(5)改进Ping命令,优化效率
我们需要学习一下ping命令的参数:
实践一下这种方法:
这样挺有效,降低了3/4的时间。优化有效!
(6)改进pingBatch.bat文件内容
可以直接右击文件【pingBatch.bat】》选择【编辑】,会用记事本打开。按【CTRL+H】进入替换操作窗口。
选择【全部替换】,结果如下图:
(7)使用重定向符【 > 】修改命令输出
重试执行批处理,效果明显好了。但怎么看结果呢,总不能在命令窗口直接看吧。要的结果是只显示能正常ping通的地址。所以需要把显示结果存放到文件里,命令行的重定向符【 > 】可以完成这个功能。
(8)查看重定向文件:result.txt
正是ping的结果呢?
可以换一个地址ping ,文件结果变成了:
怎么把所有ping 的结果都保存到这个文件中呢?
(9)把重定向符号由【>】改成【>>】
(10)用wps再次修改pingBatch.bat
(11)查找替换的结果
【全部替换】,并保存。
(12)重新执行pingBatch.bat文件
现在可以泡杯茶,慢慢等待了…
执行完毕,再次打开result.txt文件:
正常ping通的信息和没有ping通的IP区别是,能ping通的有:
来自 172.20.21.10 的回复: 字节=32 时间<1ms TTL=128
(13)用Find命令过滤结果文件result.txt
针对获取到信息,如何取出需要的内容,这涉及到数据加工处理。这里使用DOS命令find
(14)Find命令的用法
在find第一个参数指示【特征字符串内容】:TTL
第二个参数,指示对result.txt文件操作,要求带上【路径】。
C:\>find "TTL" c:\result.txt
好了,这就是常规使用DOS命令完成对某一网段探测的结果,那么A君的笔记本肯定是这几个IP中的一个,每个远程连接一下,应该很快就能得到结果。
三、使用C#编程来完成这个功能
1.程序代码(控制台程序)如下
using System;
using System.Diagnostics;
using System.IO;
using System.Text;
namespace NetPing
{class Program{static void Main(string[] args){FileStream fs = new FileStream("c:\\result.txt", FileMode.OpenOrCreate, FileAccess.Write);StreamWriter sw = new StreamWriter(fs,Encoding.Default);Console.WriteLine("正在处理中,请不要关闭窗口!");Process P = new Process();P.StartInfo.UseShellExecute = false;P.StartInfo.FileName = "cmd.exe";P.StartInfo.Arguments = "";P.StartInfo.RedirectStandardError = true;P.StartInfo.RedirectStandardInput = true;P.StartInfo.RedirectStandardOutput = true;//标准输出重定向P.OutputDataReceived += new DataReceivedEventHandler((sender, e)=>{if (!string.IsNullOrEmpty(e.Data)&&e.Data.Contains("TTL"))sw.WriteLine(e.Data);});P.Start();P.BeginOutputReadLine();for(int i=1;i<=253;i++){P.StandardInput.WriteLine("ping -n 1 172.20.21." + i.ToString());}P.StandardInput.WriteLine("exit");P.StandardInput.Flush();P.WaitForExit();P.Close();sw.Close();fs.Close();Console.WriteLine(@"处理完毕,请打开c:\result.txt继续处理!");}}
}
(1)读取StandardOutput流时,这里采用了异步方式,原因是同步方式读取流和写入流会形成依赖关系,容易形成死锁。
P.OutputDataReceived += new DataReceivedEventHandler((sender, e)=>
{if (!string.IsNullOrEmpty(e.Data)&&e.Data.Contains("TTL"))sw.WriteLine(e.Data);
});
P.Start();
P.BeginOutputReadLine();
(2)采用循环方式产生 P.StandardInput.WriteLine()标准输入指令
for(int i=1;i<=253;i++)
{P.StandardInput.WriteLine("ping -n 1 172.20.21." + i.ToString());
}
2.程序执行直接得到结果文件
程序内部即可对ping命令的输出进行处理,只保留有用的内容,最后结果保存到C:\result.txt文件
总结
首先,这是一个完整的发现问题、分析问题、解决问题的全过程。往往问题的最终解决方法并不是一发现问题就找到的。而是在问题之初有了一个模糊的想法,后面要把这个想法贯彻到底就必须不断的发现新问题并逐步解决、优化。 同时在解决这个问题之后,已经考虑再次优化这个C#程序。(希望看到这篇文章后关注并评论,将根据评论情况决定是否写下一步方案的文章)
下一步的方案:《C#多线程方式探测未知网络环境》。
同时,由本篇文章的问题情景,再次深入提出:
①在已知学校所有机房网段的基础之上,如何快速了解某一时段有XX个机房正在使用?
②如果提供单位所有的网段,能否在半小时之内掌握所有计算机的在线情况?
C#程序探测未知网络环境的神操作相关推荐
- Linux+javaEE学习笔记之Linux网络环境配置
Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...
- 计算机病毒实践汇总五:搭建虚拟网络环境
在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 涉及内容: INetSim安装及使用 ApateDNS安装及使用 1. 搭建病毒分析网络环境原因 使用虚拟机作为 ...
- 任何网络都能山寨!新型黑盒对抗攻击可模拟未知网络进行攻击 | CVPR 2021
来源:AI科技评论本文约3500字,建议阅读9分钟本文解读对抗攻击与元学习联姻的两篇典型的论文. 最近几年,元学习风生水起,这阵风也刮到了对抗攻击领域.本文解读对抗攻击与元学习联姻的两篇典型的论文(本 ...
- 嵌入式linux开发环境搭建——VirtualBox虚拟机网络环境解析
嵌入式linux开发环境搭建--VirtualBox虚拟机网络环境解析 本博文转自:Pandoras Box http://blog.csdn.net/yxc135/article/details/8 ...
- 利用局域网性能测试仪保障企业网络环境
现代社会网络的普及,已经致使人民已经离不开网络,无论是从工作.生活.基础设施等等网络应用到各行各业.而普及了网络,网络的质量就是最重要的一环.试想,网络的快与慢小到影响一个人的心情好坏,大的可以影响到 ...
- 神操作:教你用Python识别恶意软件
导读:本文将利用静态分析技术揭示这些恶意软件的功能. 作者:约书亚·萨克斯(Joshua Saxe).希拉里·桑德斯(Hillary Sanders) 来源:大数据DT(ID:hzdashuju) 在 ...
- 网络管理员&MCSE2003之2:使用虚拟机Vmware建立多电脑网络环境
我们在练习系统工程师的操作中,需要多台电脑的网络环境,使用多台物理电脑成本比较高,如果用虚拟机来模拟多电脑的网络环境,用于做练习是最合适不过了.最常用的有Vmware和Hyper-V ,而Vmware ...
- 弱网络环境下最优调度和优化传输层协议方案
一.背景 与有线网络通信相比,无线网络通信受环境影响比较大(例如高层建筑.用户移动.环境噪音.相对封闭环境等等),网络的服务质量相对来说不是非常稳定,导致用户经常会在弱信号的网络环境下通信.而当用户在 ...
- UEFI开发探索97 – EDK2模拟器搭建网络环境
(请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) EDK2模拟器搭建网络环境 1 搭建EDK2开发环境 1)工具安装 2)下载代码库 3)更新子模 ...
最新文章
- the art of java 源代码_请不要再说Java中final方法比非final性能更好了
- 英语语法---动名词短语详解
- 预警数据一键升级工具_重磅 | 教务管理全新升级,“章鱼校长”助力机构实现轻松管理...
- Sequence II HDU - 5919(主席树)
- linux的基础知识——CS模型流程图
- jstl错误:According to TLD or attribute directive in tag file, attribute value does not accept any expr
- 串口通信程序中十六进制格式发送和接收实现
- 微信小程序开发:各种页面特效集合(持续更新)
- Facebook承诺为普通市民提供1500套住房
- c /c++语法之extern关键字
- mysql过载保护_浅谈过载保护
- Mac OS X 桌面图标隐藏和显示
- 坚持并活下去!cxuan 在 CSDN 的 2020 年终总结。
- 真·稳如狗:中国团队推出四足机器人,对标波士顿动力
- 谈谈对于百度春晚战事的看法
- NUC970 裸机USBD驱动(第一章)
- 按钮查询方式控制交通灯c语言程序,单片机控制交通灯(内含程序和实物图)
- 无法安装pr计算机api,pr2017安装丢失的api-ms-
- 机甲大师s1 python_大疆机甲大师S1,可视化模块编程机器人
- 机器视觉相机和镜头选型工具——电脑端软件
热门文章
- 【Keepass】配置好keepassnatmsg插件、keepassxc-browser扩展后,出现Failed to save to the specified file未将对象引用设置到对象
- java粒子特效_Java学习之粒子系统
- 推流yasea遇到问题,即调转摄像头算法
- 零基础自学C#——Part4:类的表现形式
- Select下拉框支持搜索,jq插件,使用超级简单!
- 陈潇冰 react权威指南_React中条带化付款的分步指南
- 蓄电池外壳如何执行EN45545防火试验
- java谐音梗_你听过最好玩的英语谐音梗是?
- Solaris 问答集
- C# 获取移动硬盘和U盘信息