当前位置: 首页 > news >正文

C#获取Network的相关信息

1,获取网络的通断。

//方法1:无效果,并不能反映当前网络通断
bool available=System.Windows.Forms.SystemInformation.Network//方法2:通过VB获取网络状态,可反映当前网络通断
Microsoft.VisualBasic.Devices.Network network = new Microsoft.VisualBasic.Devices.Network();
bool available=network.IsAvailable;//方法3,可反映当前网络通断
bool available=System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

2,自定义获取Host IP ,Mac,局域网内活动IP与Mac的类。

 /// <summary>/// 本机网络连接类/// </summary>class NetworkInfo{/// <summary>/// 是否有网络连接/// </summary>public bool Available{get{return NetworkInterface.GetIsNetworkAvailable();}}/// <summary>/// 获取主机上在用的IP信息集合/// </summary>/// <returns></returns>public NetworkAddress[] GetHostNetworkAddress(){List<NetworkAddress> list = new List<NetworkAddress>();foreach (var item in NetworkInterface.GetAllNetworkInterfaces()){if (item.OperationalStatus == OperationalStatus.Up){if (item.NetworkInterfaceType == NetworkInterfaceType.Ethernet || item.NetworkInterfaceType == NetworkInterfaceType.Wireless80211){NetworkAddress info = new NetworkAddress();info.Description = item.Description;foreach (var t in item.GetIPProperties().UnicastAddresses){if (t.Address.AddressFamily == AddressFamily.InterNetwork){info.IPv4Address = t.Address.ToString();}if (t.Address.AddressFamily == AddressFamily.InterNetworkV6){info.IPv6Address = t.Address.ToString();}}string physical = item.GetPhysicalAddress().ToString();if (physical != null && physical.Length > 0){List<string> tempList = new List<string>();for (int i = 0; i < physical.Length; i += 2){tempList.Add(physical.Substring(i, 2));}physical = string.Join("-", tempList);}info.PhysicalAddress = physical;list.Add(info);}}}return list.ToArray();}/// <summary>/// 获取局域网上所有活动的IP与Mac(耗时长)/// </summary>/// <param name="ipv4">ipv4格式的IP 地址</param>/// <returns></returns>public async Task<NetworkAddress[]> ScanLocalAreaNetworkAsync(string ipv4){//格式验证if (!System.Text.RegularExpressions.Regex.IsMatch(ipv4, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")){throw new ArgumentException("格式错误,不是有效的IP地址", nameof(ipv4));}string networkNumber = ipv4.Remove(ipv4.LastIndexOf('.'));await Task.Run(() =>{// for / L % i IN(1, 1, 254) DO ping - w 2 - n 1 192.168.0.% ivar result = RunDOS($"for /L %i IN (1,1,254) DO ping -w 1 -n 1 {networkNumber}.%i");});//获取局域网中活动的IP命令:arp -astring msg = RunDOS("arp -a");//  string msg = RunDOS("ipconfig/all");var arr = System.Text.RegularExpressions.Regex.Matches(msg, @"(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\s+(\w[0-9a-z\-]+)\s");List<NetworkAddress> list = new List<NetworkAddress>();foreach (System.Text.RegularExpressions.Match item in arr){if (item.Groups.Count == 3){NetworkAddress netip = new NetworkAddress{IPv4Address = item.Groups[1].Value,PhysicalAddress = item.Groups[2].Value};list.Add(netip);}}return list.ToArray();}/// <summary>/// 通过Ping获取活动的Local Area Network IPv4地址/// </summary>/// <param name="ipv4"></param>/// <returns></returns>public NetworkAddress[] ScanLocalAreaNetwork(string ipv4){//格式验证if (!System.Text.RegularExpressions.Regex.IsMatch(ipv4, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}")){throw new ArgumentException("格式错误,不是有效的IP地址", nameof(ipv4));}string networkNumber = ipv4.Remove(ipv4.LastIndexOf('.'));List<NetworkAddress> list = new List<NetworkAddress>();Ping ping = new Ping();for (int i = 1; i < 255; i++){string targetIp = $"{networkNumber}.{i}";PingReply reply = ping.Send(targetIp, 1000);if (reply.Status == IPStatus.Success){NetworkAddress net = new NetworkAddress{IPv4Address = reply.Address.ToString(),PhysicalAddress = GetMacAddress(reply.Address.ToString())};list.Add(net);}}return list.ToArray();}/// <summary>/// 获取公网IP/// </summary>/// <returns></returns>public string GetPublicNetworkIp(){if (!Available){return "网络断开,无可用网络!";}try{WebClient client = new WebClient();string querySite = "https://qifu-api.baidubce.com/ip/local/geo/v1/district";client.Encoding = Encoding.UTF8;string result = client.DownloadString(querySite);dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(result);string msg = $"{json.data.owner} {json.data.prov} {json.data.city} {json.ip}";return msg;}catch (Exception ex){return ex.Message;}}/// <summary>/// 运行Dos指令/// </summary>/// <param name="cmdStr">DOS命令</param>/// <returns></returns>private string RunDOS(string cmdStr){ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.FileName = "cmd.exe";startInfo.UseShellExecute = false;startInfo.CreateNoWindow = true;startInfo.RedirectStandardInput = true;startInfo.RedirectStandardOutput = true;startInfo.RedirectStandardError = true;Process p = Process.Start(startInfo);//注意这里需要使用writeLine,因为这个带有回车符代表执行p.StandardInput.WriteLine(cmdStr);p.StandardInput.Close();string result = p.StandardOutput.ReadToEnd();p.WaitForExit();p.Close();return result;}public static string GetMacAddress(string RemoteIP){StringBuilder macAddress = new StringBuilder();try{Int32 remote = inet_addr(RemoteIP);Int64 macInfo = new Int64();Int32 length = 6;SendARP(remote, 0, ref macInfo, ref length);string temp = Convert.ToString(macInfo, 16).PadLeft(12, '0').ToUpper();int x = 12;for (int i = 0; i < 6; i++){if (i == 5){macAddress.Append(temp.Substring(x - 2, 2));}else{macAddress.Append(temp.Substring(x - 2, 2) + "-");}x -= 2;}return macAddress.ToString();}catch{return macAddress.ToString();}}[DllImport("Iphlpapi.dll")]static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 MacAddr, ref Int32 PhyAddrLen);[DllImport("Ws2_32.dll")]static extern Int32 inet_addr(string ipaddr);///<summary>/// SendArp获取MAC地址///</summary>///<param name="RemoteIP">目标机器的IP地址如(192.168.1.1)</param>///<returns>目标机器的mac 地址</returns>}class NetworkAddress{/// <summary>/// IPv4地址/// </summary>public string IPv4Address { get; set; }/// <summary>/// IPv6地址/// </summary>public string IPv6Address { get; set; }/// <summary>/// 物理地址/// </summary>public string PhysicalAddress { get; set; }public string Description { get; set; }}

3,效果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 招聘求职小程序
  • github技巧和bug解决方法短篇收集
  • 【Impala】学习笔记
  • Android之复制文本(TextView)剪贴板
  • 【docker快捷部署系列一】docker快速入门,安装docker,解决运行Docker Quickstart Terminal出错
  • 9、阿里云 Ubuntu22.04、安装docker、mysql、mongodb
  • JVM知识总结(类加载器)
  • 医疗大健康解决方案HIS方案
  • C# Unity 面向对象补全计划 七大原则 之 迪米特法则(Law Of Demeter )难度:☆☆☆ 总结:直取蜀汉
  • MongoDB的复合通配符索引详解
  • ulimit
  • ShardingSphere之ShardingProxy集群部署
  • C# 在Word中插入或删除分节符
  • 创建一个简单的贪吃蛇游戏:HTML、CSS和JavaScript教程
  • VS2022使用.Net Framework4.0方法
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Java IO学习笔记一
  • Javascript Math对象和Date对象常用方法详解
  • laravel5.5 视图共享数据
  • Netty源码解析1-Buffer
  • Object.assign方法不能实现深复制
  • Redis的resp协议
  • vue 个人积累(使用工具,组件)
  • 大整数乘法-表格法
  • 聊聊flink的TableFactory
  • 让你的分享飞起来——极光推出社会化分享组件
  • 如何设计一个比特币钱包服务
  • 消息队列系列二(IOT中消息队列的应用)
  • AI算硅基生命吗,为什么?
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​Java并发新构件之Exchanger
  • # 飞书APP集成平台-数字化落地
  • #《AI中文版》V3 第 1 章 概述
  • (06)金属布线——为半导体注入生命的连接
  • (2)STL算法之元素计数
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (实战篇)如何缓存数据
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)模式识别——基于SVM的道路分割实验(附资源)
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .net core + vue 搭建前后端分离的框架
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET Remoting学习笔记(三)信道
  • .net Signalr 使用笔记
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布