`
380071587
  • 浏览: 479891 次
  • 性别: 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#编程的小技巧 在本篇文章中,我们将探讨几个实用的C#编程技巧,旨在帮助开发者提升代码质量和效率。 #### 最小化窗口 在Windows应用程序中,有时我们需要控制窗体的状态,比如最小化窗口。这可以通过重写...

    C#获取本地磁盘目录完整源码.rar

    在C#编程语言中,获取本地磁盘目录是常见的任务,尤其在开发系统管理或文件操作相关的应用时。本文将详细解析如何使用C#来实现这个功能,并提供一个完整的源码示例。 首先,我们需要引入`System.IO`命名空间,这个...

    C#编的简单的查看本地磁盘的小工具

    标题中的"C#编的简单的查看本地磁盘的小工具"是一个基于C#编程语言开发的应用程序,主要用于查看计算机的本地磁盘信息。这个小工具可能是由一个程序员为了方便管理和监控存储设备而创建的,它体现了C#在系统级编程和...

    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#小实例为我们展示了如何利用`WebClient`类进行基础的网络链接操作,理解并运用这些知识点,可以帮助我们构建更复杂的网络应用程序。在实际开发中,除了`WebClient`,我们还可以使用`...

    Visual C# 窗体技巧代码

    "Visual C# 窗体技巧代码"这个主题涵盖了如何利用C#进行高效且用户友好的窗体应用开发。窗体是构建图形用户界面(GUI)的基本元素,它们提供了与用户交互的平台。以下是一些关于Visual C#窗体开发的关键知识点和技巧...

    C#指南.pdf、官方C#文档

    - **使用语义**:讲解如何利用 Roslyn 获取代码的语义信息。 - **使用工作区**:介绍如何使用 Roslyn 工作区管理项目和解决方案。 - **使用语法可视化工具浏览代码**:演示如何使用可视化工具探索代码结构。 - **...

    C#写的一个能够方便地下载歌词的小软件源码.zip

    【标题】: "C#写的一个能够方便地下载歌词的小软件源码.zip" 涵盖的知识点 这个标题表明,这是一个使用C#编程语言编写的软件源代码,其主要功能是实现歌词的便捷下载。C#是微软开发的一种面向对象的编程语言,广泛...

    C#根据CPU硬盘获取机器码源码

    这个"C#根据CPU硬盘获取机器码源码"的项目是关于如何在C#编程环境中,通过读取系统硬件信息来创建一个独特的标识符,这在软件授权验证、防盗版或者定制化服务等方面非常有用。接下来,我们将深入探讨这个主题。 ...

    C#下载器

    下载时,可以从HttpWebResponse的GetResponseStream方法获取服务器返回的数据流,然后将其复制到本地文件的Stream中,实现数据的下载。这个过程可能需要考虑断点续传、下载速度控制、错误处理等高级特性。 此外,...

    C# ftp客户端源代码

    在IT领域,C#是一种广泛使用的编程语言,尤其在开发Windows桌面应用、Web应用以及游戏等方面。本主题聚焦于"C# ftp客户端源代码",这是...通过阅读源码,不仅可以提升C#编程技巧,还能增强对网络编程和FTP协议的理解。

    c# winform手写签名,签名生成图片

    在本文中,我们将深入探讨如何使用C# WinForm来实现手写签名功能,并将签名转换为PNG图片。C#作为.NET框架的主要编程语言,提供了丰富的控件和API,使得开发这样的应用变得相对简单。我们将围绕以下几个关键点进行...

    c#游戏-拯救大行动

    在本项目"拯救大行动"中,我们探索的是如何使用C#编程语言开发一款小游戏。C#是一种由微软公司推出的面向对象的编程语言,广泛应用于Windows桌面应用、游戏开发、移动应用以及Web服务等多个领域。它以其高效性、类型...

    C#手机号码归属地查询(改编后更经典)

    在本文中,我们将深入探讨如何使用C#编程语言来实现一个手机号码归属地查询系统,这个系统基于描述中的"经典改编",集成了多种网络上的优秀代码,可以在WinForm界面中提供本地和在线两种查询方式。我们将分析这个...

    C#Socket文件传输简单例子(将文件名和文件同时传输)

    在C#编程中,Socket是网络通信的基本组件,它提供了进程间、网络间的数据传输能力。本示例主要探讨如何使用C#的Socket类进行文件的传输,包括文件名和文件内容的同步发送与接收。这里我们将详细讲解实现这一功能的...

    C# PictureBox 显示图像的两种方式测试demo

    首先,需要确保已经有一个Image对象,这个对象通常是由本地或网络上的图像文件加载而来。下面是如何实现的步骤: 1. 引入System.Drawing命名空间,因为Image类在这个命名空间中。 ```csharp using System.Drawing; ...

    C#功能界面美化(多种时尚化,颜色搭配让你的程序美不胜收)

    在C#编程中,创建美观、用户友好的界面是提升软件吸引力的重要环节。"C#功能界面美化"的主题旨在教给开发者如何利用各种技术手段,让C#应用程序的界面变得时尚且引人入胜。本篇文章将深入探讨如何在Visual Studio...

    C# web 图片采集

    本主题将深入探讨"C# Web 图片采集"这一技术,它涉及到如何利用C#编写程序来自动化地从Web上获取和处理图片。这是一项实用的技能,对于数据分析、内容抓取以及某些Web服务的构建都有重要的应用价值。 首先,我们要...

Global site tag (gtag.js) - Google Analytics