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,效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/396149.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(七)卡尔曼滤波器三:卡尔曼滤波器公式推导【转载】

卡尔曼滤波器三&#xff1a;卡尔曼公式推导 转载来源&#xff1a;卡尔曼滤波&#xff1a;从入门到精通 简述 考虑一个SLAM 问题&#xff0c;它由一个运动方程&#xff1a; x t f ( x t − 1 , u t ) ω t (1) \mathbf{x}_{t}f(\mathbf{x}_{t-1},\mathbf{u}_{t}) \omega_…

在国产芯片上实现YOLOv5/v8图像AI识别-【2.3】RK3588上使用C++启用多线程推理更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 基础…

算法(数组+链表)

37.移除元素 数组的删除其实是元素的覆盖 比如刚开始五个元素删除了一个 他变成了四个元素 但是他的空间大小还是五 删除元素是o&#xff08;n&#xff09;erase的时间复杂度是o&#xff08;n&#xff09; 暴力实现 当使用两层for循环去删除元素的时候 比如要删除元素三 …

JNPF快速开发平台助力企业实现工作流自动化

随着企业信息化建设的不断深入&#xff0c;工作流自动化已成为提升企业效率、优化业务流程的关键手段。JNPF快速开发平台凭借其强大的功能和灵活的配置&#xff0c;为众多企业提供了实现工作流自动化的高效解决方案。 关于低代码开发平台的普及应用 随着信息技术的迅猛发展&…

WEB中间件TomCat详解

一、JVM 虚拟机常识 1、什么是JAVA虚拟机 所谓虚拟机&#xff0c;就是一台虚拟的计算机。在计算机系统上模拟运行一个完整的计算机系统的技术&#xff0c;他是一款软件&#xff0c;用来执行一系列虚拟计算机指令。大体上&#xff0c;虚拟机可以分为系统虚拟机和程序虚拟机。大…

自闭症学校康复寄宿:点亮每个孩子的希望——星贝育园

在繁华都市的一角&#xff0c;有一座充满爱与希望的城堡——星贝育园&#xff0c;这是一所专门为自闭症儿童提供康复寄宿服务的学校。它宛如黑暗中的一盏明灯&#xff0c;为那些迷失在孤独世界里的孩子们照亮了前行的道路&#xff0c;点亮了他们内心深处的希望之光。 走进星贝育…

流编程思想

流编程思想 程序可以看作流&#xff0c;任何程序执行的过程都可以看成是流动的过程。基于这个思想&#xff0c;我们可以将程序划分为数据流与控制流。 数据流是数据实现的过程&#xff0c;对于相同的任务需求&#xff0c;最终数据流都会流向相同的地方&#xff0c;笔者进行举…

VBA高级应用30例应用3在Excel中的ListObject对象:创建表

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…

【AI】OCR篇1

每日更新&#xff0c;建议关注、收藏、点赞 ocr流程 版面分析 、预处理-> 行列切割 -> 字符识别 -> 后处理识别矫正 判断页面上的文本朝向&#xff0c;图像预处理&#xff0c;做角度矫正和去噪。对文档版面进行分析&#xff0c;进每一行进行行分割&#xff0c;把每…

用户体验至上:9款软件界面设计工具分享

你知道如何选择正确的UI设计软件吗&#xff1f;您知道哪些界面设计软件需要设计美观的用户界面&#xff0c;以及带来良好用户体验的APP吗&#xff1f;根据APP界面的不同功能&#xff0c;制作软件界面的选择也会有所不同。但是&#xff0c;并非要非常精通所有的制作软件界面&…

【Python基础】Python六种标准数据类型中哪些是可变数据,哪些是不可变数据

文章目录 1.基本介绍可变数据类型不可变数据类型2.可变和不可变到底指的是什么?可变(Mutable)不可变(Immutable)总结1.基本介绍 Python 中的六种标准数据类型分为可变数据类型和不可变数据类型。以下是这些数据类型的分类: 可变数据类型 列表(List) 列表是一种有序集…

使用 MRI 构建的大脑连接网络预测帕金森病萎缩进展模式| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统

Title 题目 Brain Connectivity Networks Constructed Using MRI for Predicting Patterns of Atrophy Progression in Parkinson Disease 使用 MRI 构建的大脑连接网络预测帕金森病萎缩进展模式 Background 背景 Whether connectome mapping of structural and across …

【数据结构-前缀哈希】力扣3026. 最大好子数组和

给你一个长度为 n 的数组 nums 和一个 正 整数 k 。 如果 nums 的一个 子数组 中&#xff0c;第一个元素和最后一个元素 差的绝对值恰好 为 k &#xff0c;我们称这个子数组为 好 的。换句话说&#xff0c;如果子数组 nums[i…j] 满足 |nums[i] - nums[j]| k &#xff0c;那么…

性能测试学习笔记

一、性能测试是什么&#xff1f; 1.生活案例&#xff1a; 学校选课系统&#xff0c;就会经常崩溃&#xff01;&#xff01;&#xff01;&#xff01; 2.性能测试的定义 测试人员借助测试工具&#xff0c;模拟系统在不同场景下&#xff0c;对应的性能指标是否达到预期 3.性能…

Spring -- 事务

Spring中事务的操作分为两类:(1)编程式事务 – 手动写代码操作事务(2)声明式事务 – 利用注解开启事务和提交事务 1. 编程式事务 准备Controller RestController RequestMapping("/user") public class UserInfoController {Autowiredprivate UserInfoService use…

JAVA开发学习-day21

JAVA开发学习-day21 1. 删除表单数据 根据ElementUI的官方组件指南&#xff0c;为表单每列的数据添加删除按钮 <el-table :data"tableData" style"width: 100%"><el-table-column prop"id" label"ID" width"180"…

SpringBoot基础(一):快速入门

SpringBoot基础系列文章 SpringBoot基础(一)&#xff1a;快速入门 目录 一、SpringBoot简介二、快速入门三、SpringBoot核心组件1、parent1.1、spring-boot-starter-parent1.2、spring-boot-dependencies 2、starter2.1、spring-boot-starter-web2.2、spring-boot-starter2.3、…

Visual Studio 和 Visual Studio Code 的比较与应用偏向

Visual Studio 和 Visual Studio Code&#xff08;VS Code&#xff09;是微软开发的两个不同的开发工具&#xff0c;各有特点和优势&#xff0c;适用于不同的开发需求。下面是详细的比较和在实际应用中的偏向。 功能和特性 Visual Studio 完整的IDE&#xff1a;支持多种编程…

海外短剧小程序 ,竖屏会员付费看剧系统搭建paypal,stripe对接支付功能

目录 前言&#xff1a; 一、系统功能 二、系统常见问题 总结&#xff1a; 前言&#xff1a; 在全球化的今天&#xff0c;短剧作为一种新兴的内容形式&#xff0c;正迅速赢得国际观众的心。尤其是海外市场的短剧推广&#xff0c;正成为内容创作者和营销者的新宠。本文将深入…

Adobe Substance 3D Sampler v4.2.2.3719 解锁版下载及安装教程(3D材质管理软件)

前言 Substance 3D Sampler简称“Sa”是一款由Adobe新推出的3D真实材质贴图制作软件。允许用户通过调整和混合现有材料&#xff0c;或通过扫描&#xff08;单个或多个图像&#xff09;中提取新材料来创建和迭代材料集合&#xff0c;从而轻松将真实的图片转换为具有真实感的表面…