最近玩树莓派经常发现找不到它的IP地址,每次都需要进路由器查看。如果不是在自己家的路由器更是没辙。于是想到能否做一个小工具,挨个ping一个网段内指定的地址段,如果能ping通就获取其主机名,然后显示。这样随便在哪里只要知道网段然后就能获取树莓派的IP了。
下面是做的界面:
使用方法超级简单,只需要指定一个网段,然后需要ping的地址范围。然后点击开始就行。如果你还行设置一下超时时间,也是可以滴。
主要代码也很简单,如下:
try { int startIP = int.Parse(this.textBoxIPStart.Text.Trim()); int endIP = int.Parse(this.textBoxIPEnd.Text.Trim()); int timeOut = int.Parse(this.textBoxTimeOut.Text.Trim()); this.richTextBoxOutput.Text = ""; for (int i = startIP; i < endIP + 1; i++) { try { string currentIP = this.textBoxIP.Text.Trim() + i.ToString(); this.labelStatus.Text = "正在ping " + currentIP; Ping pingSender = new Ping(); //Ping 选项设置 PingOptions options = new PingOptions(); options.DontFragment = true; //测试数据 string data = "get hostname"; byte[] buffer = Encoding.ASCII.GetBytes(data); //设置超时时间 int timeout = timeOut; //调用同步 send 方法发送数据,将返回结果保存至PingReply实例 PingReply reply = pingSender.Send(currentIP, timeout, buffer, options); if (reply.Status == IPStatus.Success) { string responseIP = reply.Address.ToString(); IPHostEntry myscanhost = Dns.GetHostByAddress(reply.Address.ToString()); this.richTextBoxOutput.AppendText("响应的主机IP:" + responseIP + " 主机名:" + myscanhost.HostName.ToString()); this.richTextBoxOutput.AppendText("\n"); } } catch (Exception ex) { this.richTextBoxOutput.AppendText(ex.Message); this.richTextBoxOutput.AppendText("\n"); } } this.richTextBoxOutput.AppendText("完成"); this.labelStatus.Text = "完成"; } catch(Exception ex) { MessageBox.Show(ex.Message); this.richTextBoxOutput.AppendText("\n"); } }
顺便把工程文件也传上来吧,VS 2012编译通过: