当前位置:首 页 > 攻城湿 >.Net & C# > 查看文章

C#遍历局域网计算机获取IP和计算机名称

.Net & C#, Windows 你是第3112个围观者 8条评论 供稿者: 标签:,
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.NetworkInformation;
using System.IO;
using System.Collections;
using System.Diagnostics;
using System.DirectoryServices;
using System.Management;
 
namespace SocketTransferFile
{
    /// <summary>
    ///
    /// </summary>
    public partial class Form1 : Form
    {
        //局域网计算机列表
        List<localmachine> machineList = new List</localmachine><localmachine>();
 
        //Form构造函数
        public Form1()
        {
            InitializeComponent();
            InitData();
        }
 
        /// <summary>
        /// 初始化数据
        /// </summary>
        private void InitData()
        {
            lvLocalMachine.Items.Clear();
            machineList.Clear();
 
            //获取当前域的计算机列表
            label4.Text = DateTime.Now.ToString();
            GetAllLocalMachines();
 
            foreach (LocalMachine machine in machineList)
            {
                ListViewItem item = new ListViewItem(new string[] { machine.Name, machine.IP });
                lvLocalMachine.Items.Add(item);
            }
            label5.Text = DateTime.Now.ToString();
 
            //获取Active Directory中的计算机节点
            //label4.Text = DateTime.Now.ToString();
            //EnumComputers();
            //label5.Text = DateTime.Now.ToString();
 
            //获取指定IP范围内的计算机
            //label4.Text = DateTime.Now.ToString();
            //EnumComputersByPing();
            //label5.Text = DateTime.Now.ToString();
        }
 
        /// <summary>
        /// Handles the Click event of the button1 control.
        /// </summary>
        /// <param name="sender"/>The source of the event.
        /// <param name="e"/>The <see cref="System.EventArgs"></see> instance containing the event data.
        private void button1_Click(object sender, EventArgs e)
        {
            InitData();
        }
 
        /// <summary>
        /// 获取指定IP范围内的计算机
        /// </summary>
        private void EnumComputersByPing()
        {
            try
            {
                for (int i = 1; i < = 254; i++)
                {
                    Ping myPing;
                    myPing = new Ping();
                    myPing.PingCompleted += new PingCompletedEventHandler(_myPing_PingCompleted);
 
                    string pingIP = "192.168.1." + i.ToString();
                    myPing.SendAsync(pingIP, 1000, null);
                }
            }
            catch
            {
            }
        }
 
        /// <summary>
        /// Handles the PingCompleted event of the _myPing control.
        /// 
        /// <param name="sender"/>The source of the event.
        /// <param name="e"/>The <see cref="System.Net.NetworkInformation.PingCompletedEventArgs"></see> instance containing the event data.
        private void _myPing_PingCompleted(object sender, PingCompletedEventArgs e)
        {
            if (e.Reply.Status == IPStatus.Success)
            {
                LocalMachine localMachine = new LocalMachine();
                localMachine.IP = e.Reply.Address.ToString();
                //localMachine.Name = Dns.GetHostByAddress(IPAddress.Parse(e.Reply.Address.ToString())).HostName;
                localMachine.Name = Dns.Resolve(e.Reply.Address.ToString()).HostName;
 
                ListViewItem item = new ListViewItem(new string[] { localMachine.Name, localMachine.IP });
                lvLocalMachine.Items.Add(item);
            }
        }
 
        /// <summary>
        /// 获取Active Directory中的计算机节点
        /// </summary>
        private void EnumComputers()
        {
            using (DirectoryEntry root = new DirectoryEntry("WinNT:"))
            {
                foreach (DirectoryEntry domain in root.Children)
                {
                    foreach (DirectoryEntry computer in domain.Children)
                    {
                        if (computer.Name == "Schema")
                        {
                            continue;
                        }
 
                        try
                        {
                            LocalMachine localMachine = new LocalMachine();
                            localMachine.IP = Dns.GetHostEntry(computer.Name).AddressList[0].ToString();
                            localMachine.Name = computer.Name;
 
                            ListViewItem item = new ListViewItem(new string[] { localMachine.Name, localMachine.IP });
                            lvLocalMachine.Items.Add(item);
                        }
                        catch
                        {
 
                        }
                    }
                }
            }
        }
 
        /// <summary>
        /// 获取当前域的计算机列表
        /// </summary>
        /// <returns></returns>
        private void GetAllLocalMachines()
        {
            Process p = new Process();
            p.StartInfo.FileName = "net";
            p.StartInfo.Arguments = "view";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;
            p.Start();
            p.StandardInput.WriteLine("exit");
 
            StreamReader reader = p.StandardOutput;
 
            for (string line = reader.ReadLine(); line != null; line = reader.ReadLine())
            {
                line = line.Trim();
                if (line.StartsWith(@"\\"))
                {
                    string name = line.Substring(2).Trim();
 
                    //如果有路由器,会列出路由器,但是获取不到IP地址,会报错
                    try
                    {
                        LocalMachine localMachine = new LocalMachine();
 
                        localMachine.IP = Dns.GetHostEntry(name).AddressList[0].ToString();
                        localMachine.Name = name;
 
                        machineList.Add(localMachine);
                    }
                    catch
                    {
                    }
                }
            }
        }
    }
 
public class LocalMachine
{
    public string IP { get; set; }
    public string Name { get; set; }
}
}
</localmachine>

这里使用了三种方法遍历局域网计算机。
1、获取当前域的计算机列表:GetAllLocalMachines
使用net命令,传递参数view,列出当前电脑所在域的所有计算机名称(完整的计算机名称)。
然后通过计算机名称获取IP地址。
适合局域网单一域的情况,测试了几次比DirectoryEntry的方式要快,不过没有进行大规模更广泛的测试。
可能无法获取工作组的服务器列表。

2、获取Active Directory中的计算机节点:EnumComputers
通过DirectoryEntry查找WinNT下的子节点,获取局域网中全部计算机的名称(完整的计算机名称)。
然后通过计算机名称获取IP地址。
可以获取局域网全部的计算机,不仅是某一个域的。速度比较慢。

3、获取指定IP范围内的计算机:EnumComputersByPing
适用c#自带的Ping,扫描当前计算机所在网段的IP地址,如果有回应,则证明计算机存在。
然后通过IP地址获取计算机名称(不一定是真正的计算机名称,可能是IIS的名称)。
需要指定IP段,不能获取真正的计算机名称。速度较快。如果需要过滤掉网关,还得自己写判断。

还有通过arp命令,和使用net命令类似,但是只能获取IP和mac地址,不能获取计算机名称。

这家伙很懒,什么都没写!

—— zhaorong

zhaorong
你可能也喜欢Related Posts
众说纷纭Comments
大眼 可爱 大笑 坏笑 害羞 发怒 折磨 快哭了 大哭 白眼 晕 流汗 困 腼腆 惊讶 憨笑 色 得意 骷髅 囧 睡觉 眨眼 亲亲 疑问 闭嘴 难过 淡定 抗议 鄙视 猪头
小提示:直接粘贴图片到输入框试试
努力发送中...
  1. 1 楼

    当迎来新春的时候,同时也迎来了[标签:标题]

    2014年01月20日 01:37:41 回复 取消回复
  2. 2 楼 访客

    伸展的眉头,快乐的心头

    2014年01月21日 05:04:07 回复 取消回复
  3. 3 楼

    ^o^如果青蛙没有变成王子,如果公主没有醒来,如果小人鱼没有化作泡沫,我还会相信爱情吗?相信!因为还有你在我的身边。茫茫人海,凭你的名字导航;凄凄寒夜,握你的名字取暖;漫漫人生,携你的名字同游。

    2014年01月23日 02:23:59 回复 取消回复
  4. 4 楼

    那种声音就像是野兽看到敌人时的低鸣,深沉的声响,却像是可以穿透对方身上的毛孔一样,让人感到寒冷颤栗。 我趴在桌子上猛盯着梨惠的背影瞧,想找出声音的来源,而听到声响的彷佛只有我一个人似的。班上其他人依然若无其事地写着考卷或者睡觉。一个不注意,我的大腿踢到了自己的桌子,桌上的涂改液应声飞起,在那一瞬间我看到了……“唔……”我强忍住惊骇捂住自己的嘴巴,睁大双眼看着梨惠的背影。我可以感受到恐怖的情绪在我的四周蔓延开来,但是却只有我自己感受得到。“没事吧?同学。”老师走过来拍拍我的肩膀,我紧张的情绪才渐渐缓和下来。刚好这时铃声响起,梨惠转过头来疑惑地看着我。“沛淳,你没事吧?”我仿佛看到梨惠映在我桌上的影子,正渐渐地拉长,想把我一口吞入它那永无止尽的黑暗之中,就像我的原子笔与涂改液那样。或许当天,彦辰不该出现在那里的。“沛淳,你的脸色真的很不好看,你没事吗?考完试之后你就怪怪的。”梨惠一脸忧心地看着我。我们一起走到地铁站。“不……我没事。”我不断地注视着梨惠身后的影子,生怕一个不注意我就会陷入它的笼罩范围之中。“梨惠,好巧!又遇到你了。”同班的彦辰忽然出现在我们身旁,拍了拍梨惠的头。“我们不知道在这里遇到过几次了好吗?还有,不要因为你高就可以这样欺负我。”梨惠嘟起嘴巴看着彦辰。那种被置身于事外的感觉又出现在我的内心之中,有种莫名的嫉妒以及怒火渐渐地高涨着。我看到地铁的灯光从不远处快速地靠近。“啊……”周遭的尖叫声响起,不少人被这样的声响所吸引,纷纷将目光往这边集中。“这……”“快叫救护车!”人群开始骚动起来,围观的人潮也慢慢聚集过来,还有不少人直接在一旁干呕着。彦辰的双手像钳子一般紧紧扣住梨惠的手腕,死不暝目的双眼瞪大了盯着我们,死前的惊恐表情在他的脸上一览无遗。梨惠跪在站台上无助地哭着,制服沾满了彦辰的鲜血,全身不断地抖动着。我一脸惊恐,不断地大口喘着气,看着眼前的一切。脑海里挥之不去的是梨惠的影子,覆盖在彦辰下半身,张着有如鳄鱼的血盆大口。“是她害死了彦辰,是她的影子把彦辰撕裂开来的。”这样的谣言在班上开始传了开来,没有人知道是谁传开的,也没有人注意到散布谣言的罪魁祸首。因为根本没有人会去多想什么,大家的脑海里只有彦辰以及另外一个同班的牺牲者——基福。基福的尸体并没有被找到,他是在那一天后离奇失踪的。放学后遇到我与梨惠的那一天。那是彦辰死后的第四天,谣言散布的前三天。基福在放学的路上遇到了我们,地铁发生了那么大的事件之后,我和梨惠改成搭公交车回家。那是我最后一次看到基福,在夕阳西下的那条巷子,梨惠身后不远处。“两次她都在现场对不对?”“故意跟大家保持友善,是想更容易把我们变成她的食物吧?”“这太荒谬了好吗?”班上的谣言闹得沸沸扬扬的,即使还有不少人相信梨惠只是一个普通的女孩子,跟那些妖怪根本扯不上关系,但是大家看到她时,心里多少会多了一份猜测以及怀疑。或许大家在心中也建立了“说不定”这个想法。梨惠在班上的人际关系,慢慢地被疏离。凶手“梨惠,我去保健室一下,我有点儿头晕。”我揉着太阳穴,不太舒服地站起身来,摇摇晃晃地准备走出教室,“等一下记得帮我跟老师说哦!”我转头叮嘱着梨惠。“沛淳,你还敢跟梨惠在一起啊?”一旁的同学跑至峨身旁小声地问着。我的嘴角微微上扬,但我知道没有人看到。“别乱说好吗!梨惠是我们的朋友,班上那些同学的死是意外,少把梨惠扯进来。”我不满地说着。“沛淳……”梨惠慢慢地走到我的身边,完全不在乎一旁一脸厌恶的眼光。“梨惠,你……”“我陪你去吧!我不放心……”我有点儿震惊地看着梨惠,随即点点头。但走到离保健室不远处的转角时,我眼前突然一黑,感觉到一阵天旋地转,后脑勺一股阵痛。这是报应吗?但这也许是值得的我失去了意识。“沛淳,你没事吧?刚刚你忽然昏倒,吓死我了。”梨惠坐在保健室的床边,一脸担忧地看着我。“应该吧……”我的视线渐渐地明朗起来,后脑勺的疼痛感还是不断地袭来。“沛淳,你休息一下。等下护士阿姨就会来了。”“哦……”或许我做得太过火,此刻我的心中有种挥之不去的愧疚感,让我不敢正眼看梨惠。“沛淳,怎么了?”梨惠疑惑地看着我。“不……没什么……”“连你也会怕我吗……”梨惠低喃着,可是每一个字都传进我的耳朵里,让我的愧疚感更重了。不过这一切都是她应得的,不是吗?一切都如我所想的一样。“沛淳……害死彦辰的凶手找到了……”梨惠娓娓道出这句话,我不禁睁大双眼,但是我依然没有看她。“凶手?”凶手不就是你自己吗?梨惠摇摇头,一脸难过地看着我:“沛淳,够了……我都知道……”“你那是什么表情!不要用那种眼神看我!”我激动地吼着,那是我最受不了的眼神,可怜我的眼神。“够了!沛淳……”梨惠开始哭泣起来。“哈哈……说的好像我就是凶手一样。那不都是你的影子把他们给吃掉的吗?不要跟我信口雌黄地说有凶手!要是有的话,那也是你!”我心中的愧疚感被满腔的怒火充斥着,渐渐快要失去理性。梨惠又摇了摇头:“沛淳……这一切的事情并不是你所想的那样……”梨惠的这句话像是一把钥匙,忽然插.入深埋在我脑海深处的潘多拉的盒子。盒子快速地开启,里面的一切像是走马灯一样,在我面前如幻灯片般播映了起来。鬼怨火(3)

    2014年02月10日 10:59:32 回复 取消回复
  5. 5 楼 访客

    LZ女、第一次发,今天在火车站上厕所,当时特别急,一冲进去就脱裤子准备蹲下去的时候,这不是GC。GC是我刚准备蹲下去特么一男的进来了,本能反映一把推了回去,可直觉告诉我还是看到了他就我铺对面的帅哥,还有十几个小时呢,蹲里面不出来了、不出、出、来、了、了lz只想说下审贴的那些大婶

    2014年03月17日 09:08:36 回复 取消回复
    • zhaorong
      5楼 - 楼中楼 zhaorong

      test

      2016年10月27日 02:55:45 回复 取消回复
    • zhaorong
      5楼 - 楼中楼 zhaorong

      嗯哪

      2016年10月27日 02:56:43 回复 取消回复
      • zhaorong
        5楼 - 楼中楼 zhaorong

        回复

        2016年10月27日 02:57:52 回复 取消回复
  • 评论最多
  • 最新评论
  • 随机文章
footer logo
未经许可请勿自行使用、转载、修改、复制、发行、出售、发表或以其它方式利用本网站之内容
Copyright © zhaorong All Rights Reserved. 滇ICP备15006105号-1