设为首页 加入收藏

TOP

C#开发:局域网IP地址扫描小工具(一)
2014-11-24 00:14:57 来源: 作者: 【 】 浏览:7
Tags:开发 局域网 地址 扫描 工具

该C#开发工具实现功能:


1、可以扫描制定C网段的地址扫描,使用ping方式进行探测


2、统计对ICMP有响应的和无响应的主机数量


C#开发:局域网IP地址扫描小工具


using System;


using System.Collections.Generic;


using System.ComponentModel;


using System.Data;


using System.Drawing;


using System.Linq;


using System.Text;


using System.Windows.Forms;


using System.Net;


using System.Net.Sockets;


using System.Threading;


using System.Net.NetworkInformation;


using System.IO;


namespace PingIP


{


public partial class Form1 : Form


{


public Form1()


{


InitializeComponent();


//关闭跨线程检查,正式开放环境中不允许这么做,只能通过回调机制来实现。


TextBox.CheckForIllegalCrossThreadCalls = false;


}


#region //开始按钮操作


//定义个线程,用于执行具体的操作。


Thread thread = null;


private void BtnStart_Click(object sender, EventArgs e)


{


//清空输出窗口内容


lbOutPut.Items.Clear();


//定义“未活动或不可达IP个数:”变量


txtip6.Text = null;


//定义“活动的IP个数:”变量


txtip7.Text = null;


//点击开始按钮后,禁用该按钮,防止用户重复点击


BtnStart.Enabled = false;


//实例化线程


thread = new Thread(Scanip);


//设置为后台线程


thread.IsBackground = true;


//启动线程


thread.Start();



}


#endregion


//定义ping的方法


void Scanip()


{


//定义IP地址输入框


int ip1 = Convert.ToInt32(txt1.Text);


int ip2 = Convert.ToInt32(txt2.Text);


int ip3 = Convert.ToInt32(txt3.Text);


int ip4 = Convert.ToInt32(txt4.Text);


int ip5 = Convert.ToInt32(txt5.Text);


int ip6 = 0;


int ip7 = 0;


//实例化一个ping实例


Ping ping = new Ping();


//定义ping的选项,其中包含ttl值和是否分段


PingOptions poption = new PingOptions(128, true);


//定义接收数组


byte[] data = new byte[32];


//定义变量


int recived = 0;


//实例化一个响应时间变量


List responseTimes = new List();


//循环执行IP地址段的每个ip的ping操作


for (int j = ip4; j <= ip5; j++)


{


//实例化IP地址


IPAddress address = IPAddress.Parse(ip1 + "." + ip2 + "." + ip3 + "." + ip4);


//最后一个IP地址段自增


ip4++;


//每个ip执行一次ping操作


for (int i = 0; i < 1; i++)


{


//防止中断ping操作。


try


{


//实例化一个reply


PingReply reply = ping.Send(address, 1000, data, poption);


string str = null;


if (reply != null)


{


//对reply状态进行分类


switch (reply.Status)


{


case IPStatus.Success:


str = string.Format("Reply From{0}" + "Bytes={1} time={2} TTL={3}", reply.Address, reply.Buffer.Length, reply.RoundtripTime, reply.Options.Ttl);


lbOutPut.Items.Add(str);


lbOutPut.SelectedItem = lbOutPut.Items[lbOutPut.Items.Count - 1];


this.Update();


recived++;


responseTimes.Add(reply.RoundtripTime);


ip7++;


txtip7.Text = ip7.ToString();


break;


case IPStatus.TimedOut:


str = address.ToString() + ":Request time Out";


lbOutPut.Items.Add(str);


lbOutPut.SelectedItem = lbOutPut.Items[lbOutPut.Items.Count - 1];


this.Update();


ip6++;


txtip6.Text = ip6.ToString();


break;


default:


str = string.Format("Ping Failed{0}", reply

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Java 8 彻底改变数据库访问 下一篇Android禁止横竖屏切换

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: