ip地址
公有IP地址:
IP地址是一个32位(IPv4)或128位(IPv6)的数字,用于唯一标识计算机、服务器、路由器或其他网络设备。每台连接到互联网的设备都必须拥有一个IP地址,这个地址充当设备在网络中的位置坐标。
简单来说,公网IP地址是可以通过 Internet 直接访问的 IP 地址,所有公共 IP 地址对其主机或服务器都是唯一的,不能重复。
私有IP地址:
私有IP地址是在局域网(LAN)中使用的IP地址,用于内部通信,通常不直接从互联网上访问。许多个设备在一个局域网中共享一个公有IP地址。私网IP地址不在 Internet 上路由,也无法从 Internet 向它们发送流量
概况:每一台设备都需要一个IP地址来进行区分标识,而IP地址中又有分为公网ip和私网ip,公网IP地址用于在互联网上可访问的设备。私有IP地址主要用于内部网络。
对比
| 特征 | 公网IP地址 | 私网IP地址 |
|---|---|---|
| 范围 | 全球性 | 本地 |
| 是否免费 | 收费 | 免费 |
| 安全性 | 不安全,容易受到攻击 | 安全 |
| 是否需要NAT | 需要 NAT 才能与设备通信 | 不需要 NAT |
IPv4 vs. IPv6
- IPv4:IPv4使用32位地址,它由四个八位组成,通常以点分十进制(例如,192.168.0.1)的形式表示。由于互联网的快速增长,IPv4地址资源已经枯竭,因此逐渐被IPv6取代。
- IPv6:IPv6采用128位地址,使用冒号分隔的八组十六进制数表示(例如,2001:0db8:85a3:0000:0000:8a2e:0370:7334)。IPv6大大扩展了可用的地址空间,以支持未来的互联网需求。
IP地址的分类
三大私网地址范围
-
10.0.0.0 到 10.255.255.255:
- 这是一个较大的私有IP地址范围,可以支持约16,777,216个IP地址。
- 通常用于大型企业或组织的内部网络。
-
172.16.0.0 到 :
- 这个范围包括16个连续的私有IP地址块,每个块支持约65,536个IP地址。
- 通常用于中型企业或组织的内部网络。
-
192.168.0.0 到 192.168.255.255:
- 这是最常见的私有IP地址范围,用于小型家庭网络和小型企业内部网络。
- 通常用于家庭路由器和小型办公室网络设备。
区分私网地址范围的意义
- 保证在不同规模和类型的网络中可以使用私有IP地址,而不会发生地址冲突。
私网ip的作用
这些私有IP地址范围允许内部网络中的设备进行本地通信,而不需要唯一的全球性标识。在连接到互联网时,路由器或防火墙会将内部私有IP地址转换为公有IP地址,以便与互联网通信。这有助于减少了IPv4地址枯竭问题,因为有限的公有IP地址可以用于多个内部设备。
那如果我们想要获取本地的IP地址,应该如何获取呢?
可以使用Python类获奖
使用Python获取本地IP地址
我们可以使用Python提供了socket库,来获取获取本地计算机的IP地址。
import socket
# 获取本地主机名
hostname = socket.gethostname()
# 获取本地IP地址
ip_address = socket.gethostbyname(hostname)
print(f"本地主机名:{hostname}")
print(f"本地IP地址:{ip_address}")
那如果我们想要获取客户端的IP地址,又该怎么获取呢?
使用JavaScript获取客户端IP地址
在Web网站中,我们可以使用第三方API(ipify)来获取IP地址:
// 使用fetch函数发送GET请求到https://api.ipify.org?format=json
fetch('https://api.ipify.org?format=json')
.then(response => response.json()) // 解析响应为JSON格式
.then(data => {
// 当JSON解析完成后,data对象包含了响应数据,其中的ip字段包含了客户端IP地址
const clientIP = data.ip;
console.log(`客户端IP地址:${clientIP}`);
})
.catch(error => {
// 捕捉任何可能的错误,如网络连接问题或JSON解析错误
console.error('获取IP地址时出错:', error);
});
代码讲解
-
使用
fetch函数向指定的URL发送GET请求。在这里,URL是https://api.ipify.org?format=json,这是一个提供IP地址信息的API。 -
一旦请求完成,
fetch会返回一个Response对象,然后我们使用.json()方法将响应解析为JSON格式。 -
第二个
.then块会在JSON解析完成后执行。此时,data对象包含了响应数据,其中的ip字段包含了客户端的IP地址。 -
最后,我们将客户端IP地址打印到控制台。如果在请求过程中出现错误,
catch块会捕获并打印错误信息。