`
380071587
  • 浏览: 452911 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C#小技巧系列之四:获取本地网络信息

 
阅读更多

说明:本人准备写一些C#有关的小技巧系列文章,这些文章含金量并不高,代码难度不大,不过因为问的次数比较多,从而导致本人决定用自己所知的方式写这一系列文章,可以看做“趣味导学”系列吧。

这是一个获取系统所有服务的程序,为了简化程序,代码仍以控制台形式提供,大家可以另外封装自己希望的功能。

核心代码:

using System;
using System.Collections.Generic;
using System.Data.Sql;
using System.Net;
using System.Net.NetworkInformation;

namespace AllSqlServer
{
class Program
{
static void Main(string[] args)
{
ShowNetworkInterfaces();

Console.ReadLine();
}

public static void ShowNetworkInterfaces()
{
IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
Console.WriteLine("Interface information for {0}.{1} ",
computerProperties.HostName, computerProperties.DomainName);
if (nics == null || nics.Length < 1)
{
Console.WriteLine(" No network interfaces found.");
return;
}

Console.WriteLine(" Number of interfaces .................... : {0}", nics.Length);
foreach (NetworkInterface adapter in nics)
{
IPInterfaceProperties properties = adapter.GetIPProperties();
Console.WriteLine();
Console.WriteLine(adapter.Description);
Console.WriteLine(String.Empty.PadLeft(adapter.Description.Length, '='));
Console.WriteLine(" 网络类型 .......................... : {0}", adapter.NetworkInterfaceType);
Console.WriteLine(" MAC地址 ........................ : {0}",
adapter.GetPhysicalAddress().ToString());
Console.WriteLine(" Operational status ...................... : {0}",
adapter.OperationalStatus);
string versions = "";

if (adapter.Supports(NetworkInterfaceComponent.IPv4))
{
versions = "IPv4";
}
if (adapter.Supports(NetworkInterfaceComponent.IPv6))
{
if (versions.Length > 0)
{
versions += " ";
}
versions += "IPv6";
}
Console.WriteLine(" IP version .............................. : {0}", versions);
ShowIPAddresses(properties);

if (adapter.NetworkInterfaceType == NetworkInterfaceType.Loopback)
{
continue;
}
Console.WriteLine(" DNS suffix .............................. : {0}",
properties.DnsSuffix);

string label;
if (adapter.Supports(NetworkInterfaceComponent.IPv4))
{
IPv4InterfaceProperties ipv4 = properties.GetIPv4Properties();
Console.WriteLine(" MTU...................................... : {0}", ipv4.Mtu);
if (ipv4.UsesWins)
{

IPAddressCollection winsServers = properties.WinsServersAddresses;
if (winsServers.Count > 0)
{
label = " WINS Servers ............................ :";
ShowIPAddresses(label, winsServers);
}
}
}

Console.WriteLine("是否被配置为向域名系统 (DNS) 服务器发送名称解析查询:............................. : {0}",
properties.IsDnsEnabled);
Console.WriteLine("是否被配置为自动向域名系统 (DNS) 注册其 IP 地址信息: .............. : {0}",
properties.IsDynamicDnsEnabled);
Console.WriteLine(" Receive Only ............................ : {0}",
adapter.IsReceiveOnly);
Console.WriteLine(" Multicast ............................... : {0}",
adapter.SupportsMulticast);

Console.WriteLine();
}
}


private static void ShowIPAddresses(IPInterfaceProperties properties)
{
Console.WriteLine("Dhcp服务器地址:");
ShowIPAddressCollection(properties.DhcpServerAddresses);
Console.WriteLine("DNS服务器 :");
ShowIPAddressCollection(properties.DnsAddresses);
Console.WriteLine("网关 :");
ShowGatewayIPAddressInformationCollection(properties.GatewayAddresses);
Console.WriteLine("是否被配置为向域名系统 (DNS) 服务器发送名称解析查询:" + properties.IsDnsEnabled.ToString());
Console.WriteLine("是否被配置为自动向域名系统 (DNS) 注册其 IP 地址信息:" + properties.IsDynamicDnsEnabled.ToString());
Console.WriteLine("分配给此接口的多路广播地址:");
ShowMulticastIPAddressInformationCollection(properties.MulticastAddresses);
Console.WriteLine("Windows Internet 名称服务 (WINS) 服务器的地址:");
ShowIPAddressCollection(properties.WinsServersAddresses);
}

private static void ShowIPAddresses(string label,IPAddressCollection winsServers)
{
Console.WriteLine("-----"+label+"-----");
ShowIPAddressCollection(winsServers);
}

private static void ShowIPAddressInformationCollection(IPAddressInformationCollection collection)
{
for (int i = 0; i < collection.Count; i++)
{
Console.WriteLine(GetIPAddressInfo(collection[i].Address));
}
}

private static void ShowIPAddressCollection(IPAddressCollection collection)
{
for (int i = 0; i < collection.Count; i++)
{
Console.WriteLine(GetIPAddressInfo(collection[i]));
}
}

private static void ShowMulticastIPAddressInformationCollection(MulticastIPAddressInformationCollection collection)
{
for (int i = 0; i < collection.Count; i++)
{
Console.WriteLine(GetIPAddressInfo(collection[i].Address));
}
}

private static string GetIPAddressInfo(IPAddress address)
{
byte[] bytes = address.GetAddressBytes();
string ipString = null;
for(int i=0;i<bytes.Length-1;i++)
{
ipString += bytes[i] + ".";
}
return ipString + bytes[bytes.Length - 1];
}

private static void ShowGatewayIPAddressInformationCollection(GatewayIPAddressInformationCollection collection)
{
for (int i = 0; i < collection.Count; i++)
{
Console.WriteLine(GetIPAddressInfo(collection[i].Address));
}
}
}
}

在我本机的执行结果如下:
Interface information for zhoufoxcn.sooyie
Number of interfaces .................... : 2

NVIDIA nForce Networking Controller
===================================
网络类型 .......................... : Ethernet
MAC地址 ........................ : 003018ADB71C
Operational status ...................... : Up
IP version .............................. : IPv4
Dhcp服务器地址:
255.255.255.255
DNS服务器 :
192.168.3.3
202.99.192.66
网关 :
192.168.3.1
是否被配置为向域名系统 (DNS) 服务器发送名称解析查询:False
是否被配置为自动向域名系统 (DNS) 注册其 IP 地址信息:True
分配给此接口的多路广播地址:
224.0.0.1
Windows Internet 名称服务 (WINS) 服务器的地址:
0.0.0.0
0.0.0.0
DNS suffix .............................. :
MTU...................................... : 1500
是否被配置为向域名系统 (DNS) 服务器发送名称解析查询:...........................
.. : False
是否被配置为自动向域名系统 (DNS) 注册其 IP 地址信息: .............. : True
Receive Only ............................ : False
Multicast ............................... : True


MS TCP Loopback interface
=========================
网络类型 .......................... : Loopback
MAC地址 ........................ :
Operational status ...................... : Up
IP version .............................. : IPv4
Dhcp服务器地址:
DNS服务器 :
网关 :
是否被配置为向域名系统 (DNS) 服务器发送名称解析查询:False
是否被配置为自动向域名系统 (DNS) 注册其 IP 地址信息:True
分配给此接口的多路广播地址:
224.0.0.1
Windows Internet 名称服务 (WINS) 服务器的地址:

分享到:
评论

相关推荐

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 &lt;br&gt;1.1 Visual Studio开发环境安装与配置 2 &lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2 &lt;br&gt;0002 配置合适的Visual Studio 2005...

    C#开发经验技巧宝典

    0770 如何获取本地计算机上所有的进程 469 0771 如何启动一个进程 470 0772 怎样杀死一个进程 470 0773 如何获取远程计算机上所有的进程 470 17.7 其他相关技术 470 0774 如何在注册表中保存窗体的大小和...

    C#微软培训资料

    第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 接口的成员 .178 15.4 接口的实现 .182 15.5 抽象类与接口 .195 15.6 小 结 .196 第十六章 组织...

    asp.net知识库

    C#中利用GetOleDbSchemaTable获取数据库内表信息[原创] 如何解决ACCESS中SELECT TOP语句竟然返回多条记录的问题? Asp.net 利用OleDb的GetOLEDBSchemaTable方法得到数据库架构信息 用于 Visual Studio .Net 的 IBM ...

    vc++ 开发实例源码包

    LocalInfoDlg.h 查看本地信息对话框类文件 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 如题。 FTP、HTTP 多线程断点续传下载文件 源码 如题。 gdiplus应用实例 如题,自绘控件的实现。 gdiplus...

    editplus 代码编辑器html c++ jsp css

    很小但是功能却很强大,编辑网页可以随时预览,能够多人工作。 附使用手册: Editplus使用技巧 技巧中,在编译器集成例子中参照了部分官方的文献。有几篇是从网上搜集来的,这里我注明了来源或原始作者。如果你是...

    EditPlus 2整理信箱的工具

    (技巧提示:空行仅包括空格符、制表符、回车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则表达式)。 直接在"查找"中输入正则表达式“^[ \t]*\n”,注意\t前有...

    Editplus 3[1].0

    (技巧提示:空行仅包括空格符、制表符、回车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则表达式)。 直接在"查找"中输入正则表达式“^[ \t]*\n”,注意\t前有...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    在IT项目管理、软件开发、系统管理和网络管理方面都有非常丰富的实践经验。曾发表过多篇计算机专业论文,并翻译过多部计算机专业技术书籍。  李文娟,中国石油大学(华东)硕士,现供职于国家行政学院,工作后一直...

    程序天下:JavaScript实例自学手册

    20.8 显示本地计算机信息 20.9 检测浏览器浏览过的站点数 20.10 IE文件菜单中的打开命令 20.11 打开Internet选项对话框 20.12 打开Windows系统的画板 20.13 弹出保存对话框 20.14 进入页面弹出收藏夹 20.15 执行...

Global site tag (gtag.js) - Google Analytics