本地IP地址
显示本机的内部网络IP地址
正在获取...
正在获取...
公网IP地址
显示您当前的外网IP地址及地理位置信息
正在获取...
IP地址验证
验证IP地址格式的有效性
CIDR计算器
计算CIDR网段的信息
代码示例
以下是如何在不同编程语言中获取IP地址和验证IP格式的代码示例:
JavaScript 获取公网IP
// 使用 fetch API 获取公网IP
async function getPublicIP() {
try {
const response = await fetch('https://api.ipify.org?format=json');
const data = await response.json();
console.log('公网IP:', data.ip);
return data.ip;
} catch (error) {
console.error('获取IP失败:', error);
}
}
// 获取详细的IP信息(包含地理位置)
async function getIPDetails() {
try {
const response = await fetch('https://ipapi.co/json/');
const data = await response.json();
console.log('IP信息:', {
ip: data.ip,
city: data.city,
region: data.region,
country: data.country_name,
isp: data.org
});
return data;
} catch (error) {
console.error('获取IP详情失败:', error);
}
}
// 验证IPv4地址
function isValidIPv4(ip) {
const pattern = /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/;
return pattern.test(ip);
}
// 验证IPv6地址
function isValidIPv6(ip) {
const pattern = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(::[0-9a-fA-F]{1,4}){1,7}|[0-9a-fA-F]{1,4}::([0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,2}::([0-9a-fA-F]{1,4}:){0,4}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,3}::([0-9a-fA-F]{1,4}:){0,3}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,4}::([0-9a-fA-F]{1,4}:){0,2}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}::[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,6}::)$/;
return pattern.test(ip);
}
Python 获取IP地址
import socket
import requests
# 获取本地IP地址
def get_local_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
local_ip = s.getsockname()[0]
s.close()
return local_ip
except Exception as e:
print(f"获取本地IP失败: {e}")
return None
# 获取公网IP地址
def get_public_ip():
try:
response = requests.get('https://api.ipify.org?format=json')
return response.json()['ip']
except Exception as e:
print(f"获取公网IP失败: {e}")
return None
# 获取详细的IP信息
def get_ip_details():
try:
response = requests.get('https://ipapi.co/json/')
return response.json()
except Exception as e:
print(f"获取IP详情失败: {e}")
return None
# 验证IPv4地址
import ipaddress
def validate_ip(ip_str):
try:
ip = ipaddress.ip_address(ip_str)
return {
'valid': True,
'version': ip.version,
'is_private': ip.is_private,
'is_loopback': ip.is_loopback,
'compressed': ip.compressed,
'exploded': ip.exploded
}
except ValueError:
return {'valid': False}
# 使用示例
if __name__ == '__main__':
print(f"本地IP: {get_local_ip()}")
print(f"公网IP: {get_public_ip()}")
print(validate_ip("192.168.1.1"))
Java 获取IP地址
import java.net.*;
import java.io.*;
import java.util.regex.*;
public class IPUtil {
// 获取本地IP地址
public static String getLocalIP() throws Exception {
InetAddress localHost = InetAddress.getLocalHost();
return localHost.getHostAddress();
}
// 获取公网IP地址
public static String getPublicIP() throws Exception {
URL url = new URL("https://api.ipify.org");
BufferedReader reader = new BufferedReader(
new InputStreamReader(url.openStream())
);
String publicIP = reader.readLine();
reader.close();
return publicIP;
}
// 验证IPv4地址
public static boolean isValidIPv4(String ip) {
String pattern =
"^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}" +
"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$";
return ip.matches(pattern);
}
// 验证IPv6地址
public static boolean isValidIPv6(String ip) {
String pattern =
"^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|" +
"(::[0-9a-fA-F]{1,4}){1,7}|" +
"[0-9a-fA-F]{1,4}::([0-9a-fA-F]{1,4}:){0,5}[0-9a-fA-F]{1,4}|" +
"([0-9a-fA-F]{1,4}:){1,2}::([0-9a-fA-F]{1,4}:){0,4}[0-9a-fA-F]{1,4}|" +
"([0-9a-fA-F]{1,4}:){1,3}::([0-9a-fA-F]{1,4}:){0,3}[0-9a-fA-F]{1,4}|" +
"([0-9a-fA-F]{1,4}:){1,4}::([0-9a-fA-F]{1,4}:){0,2}[0-9a-fA-F]{1,4}|" +
"([0-9a-fA-F]{1,4}:){1,5}::[0-9a-fA-F]{1,4}|" +
"([0-9a-fA-F]{1,4}:){1,6}::)$";
return ip.matches(pattern);
}
public static void main(String[] args) throws Exception {
System.out.println("本地IP: " + getLocalIP());
System.out.println("公网IP: " + getPublicIP());
System.out.println("192.168.1.1 valid: " + isValidIPv4("192.168.1.1"));
}
}
Node.js 获取IP地址
const os = require('os');
const http = require('http');
// 获取所有网络接口的IP地址
function getAllLocalIPs() {
const interfaces = os.networkInterfaces();
const ips = {};
for (const name of Object.keys(interfaces)) {
for (const iface of interfaces[name]) {
if (!ips[name]) {
ips[name] = [];
}
ips[name].push({
address: iface.address,
family: iface.family,
internal: iface.internal
});
}
}
return ips;
}
// 获取本地IPv4地址
function getLocalIPv4() {
const interfaces = os.networkInterfaces();
for (const name of Object.keys(interfaces)) {
for (const iface of interfaces[name]) {
if (iface.family === 'IPv4' && !iface.internal) {
return iface.address;
}
}
}
return '127.0.0.1';
}
// 获取公网IP(使用第三方API)
function getPublicIP() {
return new Promise((resolve, reject) => {
const options = {
hostname: 'api.ipify.org',
port: 80,
path: '/?format=json',
method: 'GET'
};
const req = http.request(options, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
try {
const json = JSON.parse(data);
resolve(json.ip);
} catch (e) {
reject(e);
}
});
});
req.on('error', reject);
req.end();
});
}
// 使用示例
console.log('所有网络接口:', getAllLocalIPs());
console.log('本地IPv4:', getLocalIPv4());
getPublicIP().then(ip => console.log('公网IP:', ip));
什么是IP地址?
IP地址(Internet Protocol Address)是互联网协议地址的简称,是分配给网络上每个设备的唯一标识符。IP地址用于在互联网上标识和定位设备,使设备能够相互通信。
IPv4 地址格式
IPv4(Internet Protocol version 4)是目前最广泛使用的IP地址格式。它由32位二进制数组成,通常表示为4个十进制数,每个数范围在0-255之间,用点号分隔。例如:192.168.1.1
IPv4地址空间大约有43亿个地址(2^32),由于互联网设备的快速增长,IPv4地址已经接近耗尽。
IPv6 地址格式
IPv6(Internet Protocol version 6)是IPv4的继任者,旨在解决IPv4地址耗尽的问题。IPv6由128位二进制数组成,通常表示为8组4位十六进制数,用冒号分隔。例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334
IPv6地址空间极其庞大,可以提供约3.4×10^38个地址,足够为地球上的每一粒沙子分配一个IP地址。
私有IP地址和公网IP地址
- 公网IP地址:可以在全球互联网上路由的IP地址,用于在互联网上唯一标识一个设备。
-
私有IP地址:保留用于内部网络的IP地址,不能在互联网上直接访问。常见的私有IP地址范围包括:
- 10.0.0.0 - 10.255.255.255 (10.0.0.0/8)
- 172.16.0.0 - 172.31.255.255 (172.16.0.0/12)
- 192.168.0.0 - 192.168.255.255 (192.168.0.0/16)
CIDR(无类别域间路由)
CIDR是一种IP地址分配和路由的方法,它使用斜线记法来表示IP地址及其关联的网络掩码。例如:192.168.1.0/24表示前24位是网络部分,后8位是主机部分。
常见问题(FAQ)
Q: 本地IP和公网IP有什么区别?
A: 本地IP(私有IP)是在局域网内使用的地址,由路由器分配给局域网内的设备;公网IP是全球互联网上唯一的地址,由ISP分配给路由器。局域网内的设备通过NAT(网络地址转换)共享公网IP访问互联网。
Q: 如何隐藏我的IP地址?
A: 可以使用VPN(虚拟专用网络)、代理服务器或Tor浏览器来隐藏真实IP地址。这些工具会将您的网络流量通过中间服务器路由,从而隐藏您的真实IP。
Q: IPv4和IPv6可以共存吗?
A: 可以。大多数现代操作系统和网络设备都支持双栈(Dual Stack),即同时支持IPv4和IPv6。在过渡期间,两种协议将长期共存。