对一个网段范围内的计算机的在线状态进行【数据采集】、【数据挖掘(分析、加工处理)】,最终得到所有在线计算机的数据。技术范围涉及:①命令行工具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#程序探测未知网络环境的神操作相关推荐

  1. Linux+javaEE学习笔记之Linux网络环境配置

    Linux+javaEE学习笔记之Linux网络环境配置 网络知识简单介绍: Ip地址是:IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物 ...

  2. 计算机病毒实践汇总五:搭建虚拟网络环境

    在尝试学习分析的过程中,判断结论不一定准确,只是一些我自己的思考和探索.敬请批评指正! 涉及内容: INetSim安装及使用 ApateDNS安装及使用 1. 搭建病毒分析网络环境原因 使用虚拟机作为 ...

  3. 任何网络都能山寨!新型黑盒对抗攻击可模拟未知网络进行攻击 | CVPR 2021

    来源:AI科技评论本文约3500字,建议阅读9分钟本文解读对抗攻击与元学习联姻的两篇典型的论文. 最近几年,元学习风生水起,这阵风也刮到了对抗攻击领域.本文解读对抗攻击与元学习联姻的两篇典型的论文(本 ...

  4. 嵌入式linux开发环境搭建——VirtualBox虚拟机网络环境解析

    嵌入式linux开发环境搭建--VirtualBox虚拟机网络环境解析 本博文转自:Pandoras Box http://blog.csdn.net/yxc135/article/details/8 ...

  5. 利用局域网性能测试仪保障企业网络环境

    现代社会网络的普及,已经致使人民已经离不开网络,无论是从工作.生活.基础设施等等网络应用到各行各业.而普及了网络,网络的质量就是最重要的一环.试想,网络的快与慢小到影响一个人的心情好坏,大的可以影响到 ...

  6. 神操作:教你用Python识别恶意软件

    导读:本文将利用静态分析技术揭示这些恶意软件的功能. 作者:约书亚·萨克斯(Joshua Saxe).希拉里·桑德斯(Hillary Sanders) 来源:大数据DT(ID:hzdashuju) 在 ...

  7. 网络管理员&MCSE2003之2:使用虚拟机Vmware建立多电脑网络环境

    我们在练习系统工程师的操作中,需要多台电脑的网络环境,使用多台物理电脑成本比较高,如果用虚拟机来模拟多电脑的网络环境,用于做练习是最合适不过了.最常用的有Vmware和Hyper-V ,而Vmware ...

  8. 弱网络环境下最优调度和优化传输层协议方案

    一.背景 与有线网络通信相比,无线网络通信受环境影响比较大(例如高层建筑.用户移动.环境噪音.相对封闭环境等等),网络的服务质量相对来说不是非常稳定,导致用户经常会在弱信号的网络环境下通信.而当用户在 ...

  9. UEFI开发探索97 – EDK2模拟器搭建网络环境

    (请保留-> 作者: 罗冰 https://blog.csdn.net/luobing4365) EDK2模拟器搭建网络环境 1 搭建EDK2开发环境 1)工具安装 2)下载代码库 3)更新子模 ...

最新文章

  1. the art of java 源代码_请不要再说Java中final方法比非final性能更好了
  2. 英语语法---动名词短语详解
  3. 预警数据一键升级工具_重磅 | 教务管理全新升级,“章鱼校长”助力机构实现轻松管理...
  4. Sequence II HDU - 5919(主席树)
  5. linux的基础知识——CS模型流程图
  6. jstl错误:According to TLD or attribute directive in tag file, attribute value does not accept any expr
  7. 串口通信程序中十六进制格式发送和接收实现
  8. 微信小程序开发:各种页面特效集合(持续更新)
  9. Facebook承诺为普通市民提供1500套住房
  10. c /c++语法之extern关键字
  11. mysql过载保护_浅谈过载保护
  12. Mac OS X 桌面图标隐藏和显示
  13. 坚持并活下去!cxuan 在 CSDN 的 2020 年终总结。
  14. 真·稳如狗:中国团队推出四足机器人,对标波士顿动力
  15. 谈谈对于百度春晚战事的看法
  16. NUC970 裸机USBD驱动(第一章)
  17. 按钮查询方式控制交通灯c语言程序,单片机控制交通灯(内含程序和实物图)
  18. 无法安装pr计算机api,pr2017安装丢失的api-ms-
  19. 机甲大师s1 python_大疆机甲大师S1,可视化模块编程机器人
  20. 机器视觉相机和镜头选型工具——电脑端软件

热门文章

  1. 【Keepass】配置好keepassnatmsg插件、keepassxc-browser扩展后,出现Failed to save to the specified file未将对象引用设置到对象
  2. java粒子特效_Java学习之粒子系统
  3. 推流yasea遇到问题,即调转摄像头算法
  4. 零基础自学C#——Part4:类的表现形式
  5. Select下拉框支持搜索,jq插件,使用超级简单!
  6. 陈潇冰 react权威指南_React中条带化付款的分步指南
  7. 蓄电池外壳如何执行EN45545防火试验
  8. java谐音梗_你听过最好玩的英语谐音梗是?
  9. Solaris 问答集
  10. C# 获取移动硬盘和U盘信息