当前位置: 首页 > 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,效果:

相关文章:

C#获取Network的相关信息

1&#xff0c;获取网络的通断。 //方法1&#xff1a;无效果&#xff0c;并不能反映当前网络通断 bool availableSystem.Windows.Forms.SystemInformation.Network//方法2&#xff1a;通过VB获取网络状态&#xff0c;可反映当前网络通断 Microsoft.VisualBasic.Devices.Network…...

Jenkins 部署Vue项目指引: Vue项目本地跨域代理 、解决ERR_UNSAFE_PORT

文章目录 引言I Jenkins 部署Vue项目配置插件安装系统配置NodeJS安装目录和别名设置新建任务(通用类型)构建环境Build Steps(构建步骤)II nginx部署站点(端口和站点目录的映射)查找Nginx配置文件端口和站点目录的映射III Vue项目本地跨域代理,屏蔽掉后端服务API的网关IP…...

C语言电子画板

目录 开头程序程序的流程图程序的效果结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们来看一下我用C语言编译的电子画板和与之相关的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> int main() …...

Android Gradle开发与应用技术原理

Android Gradle开发与应用技术原理 Android Gradle开发与应用技术原理一、概述二、Gradle构建原理1. Gradle架构2. Gradle构建过程3. 构建脚本 三、Gradle插件机制四、在Android应用中实现Text-to-Speech&#xff08;TTS&#xff09;功能1. 配置Gradle依赖2. 实现TTS功能示例代…...

Midjourney入门-提示词基础撰写与公式

​ 前言 在前几篇教程里我们已经可以初步使用Midjourney进行出图了。 包括也了解了Midjourney的指令与参数。 但如果你想用Midjourney去生成各种各样高质量的图片&#xff0c; 并且生成的图片是你想要的画面内容&#xff0c;也就是更好控制生成图片的画面内容与风格&#xf…...

Apache Tomcat服务器版本号隐藏

渗透测试时发现有一台服务器的404报错页面中&#xff0c;有Apache Tomcat的版本号信息显示&#xff0c;发生了信息泄露&#xff0c;可能导致服务器被攻击。如下所示&#xff1a; 解决步骤如下&#xff1a; 1. 隐藏HTTP响应头中的Server信息 Tomcat默认会在HTTP响应头中包含S…...

【Qt】Qt编程注意事项

目录 Qr中的命名规范 Qt Creator中的快捷键 查询文档的方式 Qt窗口坐标体系 Qr中的命名规范 在学习编程语言阶段&#xff0c;给变量、函数、文件、类命名是非常有讲究的。 命名要有描述性&#xff0c;不要使用abc&#xff0c;xyz这种比较无规律的名字类描述。如果名字比较…...

在Linux系统安装Kafka

注意&#xff1a;我的是在云服务器上基于Docker配 在防火墙上放行端口号 2181(Zookeeper) 9092(Kafka) 一、先配置 Docker 守护进程&#xff08;daemon&#xff09;的镜像加速器&#xff08;registry mirrors&#xff09; sudo mkdir -p /etc/docker sudo tee /etc/docker/da…...

【CSharp】简单定义一个异步方法

【CSharp】定义一个异步方法 1.背景2.异步方法3.代码说明1.背景 相关博客: 【CSharp】使用异步事件处理程序和委托来进行异步调用 https://blog.csdn.net/jn10010537/article/details/140898179在 C# 中,异步方法和同步方法是两种执行代码的方式, 它们主要区别在于处理任务…...

贪心算法之货仓选址问题

#include<stdio.h> #include<stdlib.h> #include<math.h>//贪心算法之货仓选址问题/*** void* p是万能指针&#xff0c;可以和其它任意类型的指针进行转换&#xff0c;前提是确保转换是合法的*/ //写好用于qsort的比较函数&#xff0c;这里写的函数一般用于…...

Java网络编程——Request Response 对象

Response - 网页 上一章我们学习了 Java 中使用 Okhttp3 库请求网页或调用 API 的知识。 使用一条语句执行调用请求&#xff0c;并取得返回结果字符串&#xff1a; call.execute().body().string()execute() 方法是真正执行发送请求&#xff0c;前面的一系列代码是做前置准备…...

【代码随想录训练营第42期 Day24打卡 回溯Part3 - LeetCode 93.复原IP地址 78.子集 90.子集II

目录 一、做题心得 二、题目与题解 题目一&#xff1a;93.复原IP地址 题目链接 题解&#xff1a;回溯--分割问题 题目二&#xff1a;78.子集 题目链接 题解&#xff1a;回溯--子集问题 题目三&#xff1a;90.子集II 题目链接 题解&#xff1a;回溯--子集问题 三、小…...

python venv和virtualenv详解

一、venv简介 C:\Users\love1>python -m venv -h usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear] [--upgrade] [--without-pip][--prompt PROMPT] [--upgrade-deps]ENV_DIR [ENV_DIR ...]该命令用于在一个目录或者多个目录中创建一个虚拟的…...

《征服数据结构》树堆(Treap)

摘要&#xff1a; 1&#xff0c;Treap的介绍 2&#xff0c;Treap节点的插入 3&#xff0c;Treap节点的删除 4&#xff0c;Treap和笛卡尔树的区别 1&#xff0c;Treap的介绍 Treap又叫树堆&#xff0c;属于一种自平衡二叉搜索树&#xff0c;是由单词Tree和Heap构成&#xff0c;是…...

论文笔记:OneBit: Towards Extremely Low-bit Large Language Models

202402 arxiv 1 背景 模型量化主要通过把模型的线性层【nn.Linear】&#xff08;Embedding 层和 Lm_head 层除外&#xff09;转化为低精度表示实现空间压缩 此前工作的基础是利用 Round-To-Nearest&#xff08;RTN&#xff09;方法把高精度浮点数近似映射到附近的整数网格然而…...

英语文化中的音乐分类及其发展历史(Classical、Jazz、Rock、Pop、Electronic、Country、RB、Hip-Hop)

文章目录 英语文化中的音乐分类及其发展历史1. 简介2. 古典音乐 (Classical Music)2.1 起源与发展2.2 技术与风格 3. 爵士音乐 (Jazz Music)3.1 起源与发展3.2 技术与风格 4. 摇滚音乐 (Rock Music)&#xff08;Rock and roll&#xff09;4.1 起源与发展4.2 技术与风格 5. 蓝调…...

C语言-栈、队列、二叉树

12 栈、队列、二叉树 目录 12 栈、队列、二叉树 一、栈、队列、二叉树是什么&#xff1f; 二、栈 1. 特点&#xff1a;先进后出 -- 有底的盒子 2. 使用场景&#xff1a;函数调用 -- 中断机制 3. 实现栈的形式&#xff1a; 三、队列 1. 特点&#xff1a;先进先出 -- 水…...

pinia-plugin-persistedstate 插件不生效

引入使用该插件使用时发现不生效 原因&#xff1a;pinia实例调用顺序不当 将&#xff1a; // import ./assets/main.css import { createApp } from vue import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstate import App fr…...

sqlite 合并两个数据库中的特定表

sqlite 合并两个数据库中的特定表 命令行python 版本 命令行 .open v1/mydb.db attach v2/mydb.db as db2; insert into main.表1 select * from db2.表1; insert into main.表2 select * from db2.表2; .exit参数说明v1/mydb.db主db文件路径&#xff0c;合并后的结果就是它…...

winform中设置DateTimePicker参数为空

在C#中&#xff0c;使用DateTimePicker控件时&#xff0c;您可以将其Value属性设置为null或者DateTime.MinValue来表示没有选定的日期或时间。以下是如何设置默认值为空的示例代码&#xff1a; dateTimePicker1.Value DateTime.MinValue; 或者&#xff0c;如果您希望用户不能…...

Git 本地版本控制极简使用笔记(Qt 项目专用)

核心原则全程仅需掌握5 个核心命令&#xff0c;满足日常开发、版本记录、回滚修复的全部需求&#xff0c;无需复杂操作&#xff0c;适配传感器环筛管理平台项目一、基础准备&#xff08;已完成&#xff0c;备查&#xff09;1. 仓库初始化&#xff08;仅执行 1 次&#xff09;# …...

javase的第一次博客

1&#xff0c;计算机简介&#xff1a;用于数据计算和处理2&#xff0c;计算机的硬件和软件&#xff1a;计算机硬件&#xff1a;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备&#xff0c;输出设备&#xff08;冯 诺依曼模型&#xff09;CPU&#xff1a;运算…...

QMCFLAC2MP3深度解析:从格式解密到跨设备音频转换的全流程实践

QMCFLAC2MP3深度解析&#xff1a;从格式解密到跨设备音频转换的全流程实践 【免费下载链接】qmcflac2mp3 直接将qmcflac文件转换成mp3文件&#xff0c;突破QQ音乐的格式限制 项目地址: https://gitcode.com/gh_mirrors/qm/qmcflac2mp3 问题引入&#xff1a;破解音乐格式…...

AI Infra 架构全景介绍

AI Infra 架构全景 一、什么是 AI Infra AI Infra&#xff08;AI 基础设施&#xff09;是支撑大模型从开发到落地全过程的软件栈。它解决的核心问题是&#xff1a;如何让模型在有限的硬件资源上跑得更快、更大、更稳。 从抽象的视角看&#xff0c;整个 AI Infra 可以划分为三个…...

源码被泄露,Claude Code 之父回应:人为错误,没有开除犯事员工

昨天 Claude Code 被泄露开源的事&#xff0c;大家都知道了。 ① 今天上午&#xff0c;估计大家已经看到了一封自称 A 社犯事员工发的帖子&#xff0c;说自己被开除了。其实这哥们搞抽象呢&#xff0c;已经辟谣了&#xff0c;他压根就不是 A 社工程师。 ② Claude Code 之父回应…...

避坑指南:Python中Theil-Sen和Mann-Kendall检验的5个常见错误

避坑指南&#xff1a;Python中Theil-Sen和Mann-Kendall检验的5个常见错误 在时间序列分析领域&#xff0c;Theil-Sen Median斜率估计与Mann-Kendall检验的组合堪称经典搭档。这对非参数方法组合能有效应对异常值干扰&#xff0c;且不依赖数据分布假设&#xff0c;被广泛应用于环…...

DAMOYOLO模型一键部署教程:基于Ubuntu20.04与Docker环境

DAMOYOLO模型一键部署教程&#xff1a;基于Ubuntu20.04与Docker环境 想试试最新的目标检测模型&#xff0c;但被复杂的依赖和配置搞得头大&#xff1f;别担心&#xff0c;今天咱们就来聊聊怎么用最简单的方式&#xff0c;在Ubuntu 20.04上把DAMOYOLO模型跑起来。整个过程就像搭…...

别只埋头改Bug!从Flutter高德地图鸿蒙适配,聊聊跨平台插件架构设计的最佳实践

从Flutter高德地图鸿蒙适配看跨平台插件架构设计的黄金法则 当Flutter遇上鸿蒙&#xff0c;开发者们既兴奋又忐忑。兴奋的是跨平台开发框架与国产操作系统的强强联合&#xff0c;忐忑的是两者结合带来的技术适配挑战。去年我们团队在将高德地图SDK集成到Flutter鸿蒙应用时&…...

AI论文生成工具推荐:7款高效平台(含爱毕业aibiye)支持自动排版与LaTeX智能匹配

工具快速对比排名&#xff08;前7推荐&#xff09; 工具名称 核心功能亮点 处理时间 适配平台 aibiye 学生/编辑双模式降AIGC 1分钟 知网、万方等 aicheck AI痕迹精准弱化查重一体 ~20分钟 知网、格子达、维普 askpaper AIGC率个位数优化 ~20分钟 高校检测规则通…...

Qwen2.5-7B-Instruct效果展示:复杂代码生成与深度知识解答真实案例

Qwen2.5-7B-Instruct效果展示&#xff1a;复杂代码生成与深度知识解答真实案例 1. 项目简介 Qwen2.5-7B-Instruct是阿里通义千问系列的旗舰级大模型&#xff0c;相比1.5B和3B的轻量版本&#xff0c;这个7B参数的模型在能力上实现了质的飞跃。它专门针对复杂的文本交互场景设计…...