随笔-54  评论-467  文章-0  trackbacks-2

本代码参考了部分VC++版nbtstat,在此表示感谢和敬意!

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class NBTSTAT
{
    public static void Main()
    {
        byte[] bs = new byte[50] { 0x0, 0x00, 0x0, 0x10, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x43, 0x4b, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x0, 0x0, 0x21, 0x0, 0x1 };
        byte[] Buf = new byte[500];
        byte[,] recv=new byte[18,28];
        string str = "", strHost = "", Group = "", User = "", strMac = "";
        int receive, macline = 0, usernum = 0;
        string[] domainuser = new string[2];
        domainuser[0] = "";
        domainuser[1] = "";

        try
        {
            IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
            EndPoint Remote = (EndPoint)sender;

            IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.2"), 137);

            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

            server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000);
            server.SendTo(bs, bs.Length, SocketFlags.None, ipep);
            receive = server.ReceiveFrom(Buf, ref Remote);
            server.Close();

            if (receive > 0)
            {
                recv = new byte[18, (receive - 56) % 18];

                for (int k = 0; k < (receive - 56) % 18; k++)
                {
                    for (int j = 0; j < 18; j++)
                    {
                        recv[j, k] = Buf[57 + 18 * k + j];
                    }
                }

                for (int k = 0; k < (receive - 56) % 18; k++)
                {
                    str = "";
                    if (System.Convert.ToString(recv[15, k], 16) == "0" && (System.Convert.ToString(recv[16, k], 16) == "4" || System.Convert.ToString(recv[16, k], 16) == "44"))
                    {
                        for (int j = 0; j < 15; j++)
                        {
                            str += System.Convert.ToChar(recv[j, k]).ToString();
                        }
                        strHost = str.Trim();
                    }

                    if (System.Convert.ToString(recv[15, k], 16) == "0" && (System.Convert.ToString(recv[16, k], 16) == "84" || System.Convert.ToString(recv[16, k], 16).ToUpper() == "C4"))
                    {
                        for (int j = 0; j < 15; j++)
                        {
                            str += System.Convert.ToChar(recv[j, k]).ToString();
                        }
                        Group = str.Trim();
                    }

                    if (System.Convert.ToString(recv[15, k], 16) == "3" && (System.Convert.ToString(recv[16, k], 16) == "4" || System.Convert.ToString(recv[16, k], 16) == "44"))
                    {
                        for (int j = 0; j < 15; j++)
                        {
                            str += System.Convert.ToChar(recv[j, k]).ToString();
                        }
                        domainuser[usernum] = str.Trim();
                        usernum++;
                    }

                    if (System.Convert.ToString(recv[15, k], 16) == "0" && System.Convert.ToString(recv[16, k], 16) == "0" && System.Convert.ToString(recv[17, k], 16) == "0")
                    {
                        macline = k;

                        for (int i = 0; i < 6; i++)
                        {
                            if (i < 5)
                            {
                                strMac += System.Convert.ToString(recv[i, macline], 16).PadLeft(2, '0').ToUpper() + ":";
                            }
                            if (i == 5)
                            {
                                strMac += System.Convert.ToString(recv[i, macline], 16).PadLeft(2, '0').ToUpper();
                            }
                        }
                        k = (receive - 56) % 18;
                    }
                }
                User = domainuser[1];
                if (string.IsNullOrEmpty(domainuser[1])) { User = domainuser[0]; }
                Console.WriteLine(strHost);
                Console.WriteLine(Group);
                Console.WriteLine(User);
                Console.WriteLine(strMac);
            }
        }
        catch (SocketException ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

posted on 2007-01-22 14:16 Mossan 阅读(3248) 评论(5)  编辑 收藏 网摘 所属分类: C#

评论:
#1楼 2007-01-22 16:27 | www[未注册用户]
贴一大堆这样的代码在首页上,又没有任何说明,用来干什么的?能给别来带来什么帮助?
  回复  引用    
#2楼 2007-01-22 22:12 | 横刀天笑      
呵呵,不错。最近一直想解决这样的一个问题,请指教一下,我想完成一个程序,用来监测本机的一个端口(porta),看看有那些Client连接到本机的porta。列出所有Client的IP,就是和netstat -a一样的功能,不知道怎么实现,能给点建议么?谢谢!
  回复  引用  查看    
#3楼 2007-01-23 22:04 | mossan1[未注册用户]
到google搜一下C# netstat
  回复  引用    
#4楼 2007-09-13 13:23 | NilRXn[未注册用户]
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.1.2"), 137);
改成你自己的IP或者目标IP
就可以看到计算机名 工作组 MAC地址
好像有点多余

  回复  引用    
#5楼 2007-09-13 21:49 | Mossan01[未注册用户]
不太明白你的意思,能够说得更详细一些吗?
  回复  引用    



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 626887




相关文章:

相关链接: