c# 判断是否连接公网

有一个需求,软件需要在连接公网的状态下才能使用,否则弹出提示

我们判断一下网络不通情况

1.系统未开启网络:例如关掉了WIFI,拔掉网线

2.网络已连接无internet:连接了路由器,但路由器未连接外网

对于以上两种情况:

1.首先可以使用一下代码,来判断系统是否开启网络

cs 复制代码
System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable()

2.可以使用ping命令,测试是否能达到目标主机进而判断是否连接了外网

cs 复制代码
    string host = "www.baidu.com";//测试主机,根据自己需求随意填
	PingReply reply = null;

	Ping ping = new Ping();
	try {
		reply = ping.Send(host);

	}
	catch (Exception e) {
		if (e.Message != "") {
			return false;
		}
	}

	if (reply.Status == IPStatus.Success) {
		return true;//网络正常,可以访问host主机
	}
	else {
		return false;//无法访问网络
	}

这里的ping命令,在路由器没网的情况会报错,用try包裹,如果报错,直接抛出网络未连接即可

那么对于主机,想仅判断局域网内某192.168.X.X 的Host是否连通也可以,这样就从判断是否连接外网到判断是否连接内网某主机或vlan

完整的验证代码如下:

cs 复制代码
public static bool CheckWebIsConnected() {

	//首先验证,系统级的,wifi或者网络底层配置,是否开启
	bool isSystemNetConnect = System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();

	if (!isSystemNetConnect) {
		return false;//系统级就没给网,直接返回false
	}

	//如果系统级开启了网络,例如连接了路由器,但路由器内没网
	//使用ping测试主机
	string host = "www.baidu.com";
	PingReply reply = null;

	Ping ping = new Ping();
	try {
		reply = ping.Send(host);

	}
	catch (Exception e) {
		if (e.Message != "") {
			return false;
		}
	}

	if (reply.Status == IPStatus.Success) {
		return true;//网络正常,可以访问host主机
	}
	else {
		return false;//无法访问网络
	}

}
相关推荐
运维行者_15 分钟前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控
pt104325 分钟前
Cisco设备网络安全系列-20:DevSecOps集成
网络·安全·架构
IT古董30 分钟前
Modbus TCP 详解:工业设备通信协议与 MES 集成实战
网络·网络协议·tcp/ip
自由彩虹1 小时前
靶场通关15--bossplayersctf
linux·服务器·网络·安全·web安全·网络安全
叼烟扛炮1 小时前
Linux 学习笔记(四十五):Web 安全基石——Cookie、Session 与 HTTPS 原理解析
linux·前端·网络·笔记·学习·tcp/ip·安全
2401_868534781 小时前
网络规划设计师之案例分析 - 网络安全与等级保护
服务器·网络
是真的小外套1 小时前
网络安全实战第10期:Nmap主机发现之一键扫清整个网段
网络·安全·web安全
北冥you鱼2 小时前
区块链供应链金融如何降低中小企业融资成本
网络·金融·区块链
Linux_cy2 小时前
nginx 502 排查手册:九种原因分类、定位命令与检查顺序
linux·运维·服务器·网络·数据库·nginx·ssh
椒颜皮皮虾྅2 小时前
让 C# 读懂整张图:DeploySharp 驱动 PaddleOCR v4/v5/v6,打通 OCR 全流程
开发语言·人工智能·深度学习·学习·c#·ocr·cuda