Android 获取客户端外网IP和服务端IP

本文介绍了两种IP地址获取方式:一是通过发送HTTP请求至特定URL解析客户端外网IP;二是利用域名解析服务端IP。提供了具体实现代码,并讨论了在SDK中集成这些功能的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目组最近添加新需求,要获取客户端和服务端IP,削微研究了一下,总结如下:

1、获取客户端外网IP(为啥不要内网,因为那玩意没鸟用,外网IP起码能确定客户端的地区位置)
目前只有一种方法可以获取:发送http请求到一个专门搞IP解析的url,通过返回的值解析出IP。这类url市面上不少,哥试了8种,没错,就是百度前三页上面所有涉及的url,响应最快返回值废话最少的是:http://ip.taobao.com/service/getIpInfo2.php?ip=myip。这里谢谢无私伟大的淘宝,希望坚持下去。
主要代码如下:
URL url = new URL("http://ip.taobao.com/service/getIpInfo2.php?ip=myip");
 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 int responseCode = conn.getResponseCode();
 if (responseCode == HttpURLConnection.HTTP_OK) {
 InputStream is = conn.getInputStream();
 BufferedReader br = new BufferedReader(new InputStreamReader(is));
 StringBuffer sb = new StringBuffer();
 String str;
 while ((str = br.readLine()) != null) {
 sb.append(str);
 }
 JSONObject obj = new JSONObject(sb.toString());
 String data = obj.getString("data");
 JSONObject dataObj = new JSONObject(data);
 String ip = dataObj.getString("ip");
 br.close();
 is.close();
 return ip;
 }


2、获取服务端IP
这个获取的方法主要是通过域名来解析,主要代码如下:
String name = "www.baidu.com";
 InetAddress[] addresses = new InetAddress[0];
 try {
 addresses = InetAddress.getAllByName(name);
 } catch (UnknownHostException e) {
 e.printStackTrace();
 }
 for (int i = 0; i < addresses.length; i++) {

 sb.append(name + "[" + i + "]: "
 + addresses[i].getHostAddress());

 }

其实有这种需求的通常是做第三方sdk的,比如哥这种项目,所以最好是上面的功能都在sdk里面自己搞定,不用客户端再调个接口传个域名啥的,否则削微会影响一点体验(哥是不是考虑的有点多?)。那要怎么获取客户端代码里面的域名了,听说可以用代码注入搞定,好吧,又有得研究了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值