以下是使用Python 3检测网络连接的两种常用方法,供您参考:
### 一、使用 `ping` 命令检测网络连通性
`ping` 是最简单直接的网络连通性检测方法,通过发送ICMP包判断目标主机是否可达。
**示例代码:**
```python
import subprocess
def ping_host(host="8.8.8.8", timeout=5):
try:
# 执行ping命令,超时时间为5秒
result = subprocess.run(
["ping", "-c", "1", host],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
timeout=timeout
)
# 判断返回码是否为0(成功)
return result.returncode == 0
except subprocess.TimeoutExpired:
return False
except Exception as e:
print(f"Error: {e}")
return False
if ping_host():
print(f"网络连接正常,可访问 {host}")
else:
print(f"无法连接到 {host}")
```
**说明:**
- 默认情况下,`ping` 命令超时时间为10秒,此处设置为5秒;
- 可通过修改 `host` 参数指定目标IP或域名(如 `www.baidu.com`);
- 该方法适用于检测主机是否在线,但可能受防火墙或网络策略限制。
### 二、使用 `socket` 库检测网络连接
`socket` 库允许你通过TCP协议直接建立连接,适用于检测目标主机是否可访问特定端口。
**示例代码:**
```python
import socket
def check_internet_connection(host="www.baidu.com", port=80):
try:
# 创建一个TCP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置超时时间为10秒
sock.settimeout(10)
# 尝试连接
sock.connect((host, port))
# 连接成功后关闭socket
sock.close()
return True
except socket.timeout:
return False
except OSError as e:
print(f"网络错误: {e}")
return False
if check_internet_connection():
print(f"网络连接正常,可访问 {host}:{port}")
else:
print(f"无法连接到 {host}:{port}")
```
**说明:**
- 通过连接互联网常用服务器(如 `www.baidu.com` 的80端口)判断网络连通性;
- 该方法比 `ping` 更直接,但仅能检测目标端口是否开放,无法判断主机是否在线;
- 可通过修改 `host` 和 `port` 参数进行自定义检测。
### 三、其他注意事项
**权限问题** :某些操作系统(如Windows)可能需要管理员权限才能执行网络检测;
**网络策略限制** :企业或学校网络可能屏蔽了 `ping` 或特定端口,需确认网络策略;
**多目标检测** :若需检测多个主机,可扩展上述代码使用循环或并发处理。
建议根据具体需求选择合适的方法:若需快速判断主机在线状态,使用 `ping`;若需检测特定服务端口,使用 `socket` 连接。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。