如何在React Native上获取设备的IP地址?

21

在Node中我们可以使用require('os'),但是在React Native上无法这样做。有什么想法吗?

6个回答

25

有一个React Native库可以获取设备网络信息:

react-native-network-info

// require module
var NetworkInfo = require('react-native-network-info');

// Get Local IP
NetworkInfo.getIPAddress(ip => {
  console.log(ip);
});

11
这将获取本地IP地址,而非外部IP地址。 - Ulises Giacoman
1
实际上,如果您查看检索此IP的本机Java代码,它会遍历所有接口并返回最后一个有效IP。这意味着,如果设备缓存了IP或有多个接口处于活动状态并在多个设备上提供IP,则会获得无效地址。因此,从定义上讲,此方法存在缺陷,并且通常仅偶然起作用。我使用此方法时遇到过给我提供无效IP地址(移动数据接口而不是Wi-Fi)的具体设备。 - Fëamarto
你可以尝试使用以下代码获取公共IP地址:NetworkInfo.getIPV4Address().then(ipv4Address => { console.log(ipv4Address); }); - Rakmo
对不起,请问本地IP和外部IP有什么区别? - kayongo Johnson Brian
我认为@Nexus242更简单,对我起了作用。 - Prakhar Parikh

21
import publicIP from 'react-native-public-ip';

publicIP()
.then(ip => {    
  console.log(ip);
  // '47.122.71.234'
})
.catch(error => {
  console.log(error);
  // 'Unable to get IP address.'
});

了解更多信息请访问: https://www.npmjs.com/package/react-native-public-ip


这将返回公共IP地址,应该是我的答案。谢谢。 - Jeaf Gilbert

4

这个包提供以下API

npm i react-native-network-info



import { NetworkInfo } from "react-native-network-info";
 
// Get Local IP
NetworkInfo.getIPAddress().then(ipAddress => {
  console.log(ipAddress);
});
 
// Get IPv4 IP (priority: WiFi first, cellular second)
NetworkInfo.getIPV4Address().then(ipv4Address => {
  console.log(ipv4Address);
});
 
// Get Broadcast
NetworkInfo.getBroadcast().then(broadcast => {
  console.log(broadcast);
});
 
// Get SSID
NetworkInfo.getSSID().then(ssid => {
  console.log(ssid);
});
 
// Get BSSID
NetworkInfo.getBSSID().then(bssid => {
  console.log(bssid);
});
 
// Get Subnet
NetworkInfo.getSubnet().then(subnet => {
  console.log(subnet);
});
 
// Get Default Gateway IP
NetworkInfo.getGatewayIPAddress().then(defaultGateway => {
  console.log(defaultGateway);
});
 
// Get frequency (supported only for Android)
NetworkInfo.getFrequency().then(frequency => {
  console.log(frequency);
});

2

0

在此输入图像描述 最新更新的解决方案,无需使用库:

fetch('https://ipapi.co/json/')
  .then(response => response.json())
  .then(data => {
    console.log('ipapi_getIpAddressgetIpAddress', data);
    Alert.alert('ipapi', JSON.stringify(data));
  }); //paid after some usage

fetch('https://api.ipify.org?format=json')
  .then(response => response.json())
  .then(data => {
    console.log('apiv4_getIpAddressgetIpAddress', data);
    Alert.alert('apiv4', JSON.stringify(data));
  }); //free

fetch('https://api64.ipify.org?format=json')
  .then(response => response.json())
  .then(data => {
    console.log('apiv6_getIpAddressgetIpAddress', data);
    Alert.alert('apiv6', JSON.stringify(data));
  });  //free

-1

这是此内容的社区包。 @react-native-community/netinfo

import NetInfo from "@react-native-community/netinfo";
// Subscribe
const unsubscribe = NetInfo.addEventListener(state => {
  console.log("Connection type", state.type);
  console.log("Is connected?", state.isConnected);
});

// Unsubscribe
unsubscribe();
NetInfo.fetch().then(state => {
  console.log("Connection type", state.type);
  console.log("Is connected?", state.isConnected);
});

获取公共 IP 地址,请使用以下方法

import publicIP from 'react-native-public-ip';
 
publicIP()
  .then(ip => {
    console.log(ip);
    // '47.122.71.234'
  })
  .catch(error => {
    console.log(error);
    // 'Unable to get IP address.'
  });

但是这个软件包不会返回公共IP地址。有没有办法获取公共IP地址...就像在谷歌中输入“我的IP”时获得的那样? - Abdullah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接