
根据你的描述,既要保证自己上网网速不受影响,同时又能防止其它人蹭网,可以采取以下办法:
第一、修改信息。关闭SSID广播。
第二、加密网络。使用WPA2-PSK中AES方式加密,密码设置尽可能长,使用数字加大小写字母加符号组合形成。
第三、地址过滤。将所有已方计算机MAC地址添加到白名单,在无线路由器找到无线设置,打开MAC地址过滤,在允许的列表中添加新条目,填写上手机的MAC地址。
第四、关闭DHCP功能。
第五、定期升级。到路由器官方网站查看固件更新,防止路由器漏洞导致的蹭网。
但是,目前android不支持IPV6的协议,不过据说内核C库上是支持。。网络是推荐使用GogoDroid客户端来获取IPV6地址;
经尝试,是可以获取地址,但是总不能要求需要使用的客户端都安装这个软件吧。不太现实。现状:
现在,服务器部署在IPV6网络环境,提供支持IPV6的路由器;问题,开发的客户端(不包括GogoDroid)需要用IPV6协议的网络访问服务器接口,但是手机并不能获取到IPV6地址。思路:
1、客户端自行, 模拟GogoDroid的方式,来获取一个网络地址。比较可行,毕竟是开源的项目。。
2、通过NDK来调用C库,完成获取IPV6地址的 *** 作。。第一种方式的可行性比较高。。大家有更好的方式或者是已经现成的解决方案,希望能帮忙提供信息资料,不胜感激。!
第一种方案
[mw_shl_code=java,true] // 获取本地IP函数
public String getLocalIPAddress() {
WifiManager wifimanage = (WifiManager) getSystemService(thisWIFI_SERVICE);// 获取WifiManager
// 检查wifi是否开启
if (wifimanageisWifiEnabled()) {
WifiInfo wifiinfo = wifimanagegetConnectionInfo();
String wifiip = intToIp(wifiinfogetIpAddress());
Logi("MyTag", "-------wifiip----" + wifiip);
return wifiip;
}
try {
for (Enumeration<NetworkInterface> mEnumeration = NetworkInterface
getNetworkInterfaces(); mEnumerationhasMoreElements();) {
NetworkInterface intf = mEnumerationnextElement();
for (Enumeration<InetAddress> enumIPAddr = intf
getInetAddresses(); enumIPAddrhasMoreElements();) {
InetAddress inetAddress = enumIPAddrnextElement(); // 如果不是回环地址
if (!inetAddressisLoopbackAddress()) { // 直接返回本地IP地址
Logi("MyTag", "------getLocalIPAddress---"
+ inetAddressgetHostAddress()toString());
return inetAddressgetHostAddress()toString();
}
}
}
} catch (SocketException ex) {
exprintStackTrace();
}
Logi("MyTag", "------getLocalIPAddress---" + null);
return null;
}[/mw_shl_code]
测试结果:手机端可以正常获取,
电视盒子在插入网线情况下获取的是一串字符fe80::5ec6:d0ff:fec3:b963%eth0,网上有人这是16进制需要处理,但是处理后貌似不是对的ip,wifi下情况正常。
(由于手机不会插入网线,所以此方法是适用手机的)
第二种 方案
此方法可以选择获取ipv4或ipv6,当然我们用的是ipv4
[mw_shl_code=java,true] /
Get IP address from first non-localhost interface
@param ipv4
true=return ipv4, false=return ipv6
@return address or empty string
/
public String getIPAddress(boolean useIPv4) {
WifiManager wifimanage = ((WifiManager) getSystemService(thisWIFI_SERVICE));// 获取WifiManager
// 检查wifi是否开启
if (wifimanageisWifiEnabled()) {
WifiInfo wifiinfo = wifimanagegetConnectionInfo();
String wifiip = intToIp(wifiinfogetIpAddress());
Logi("MyTag", "-------wifiip----" + wifiip);
return wifiip;
}
try {
List<NetworkInterface> interfaces = Collections
list(NetworkInterfacegetNetworkInterfaces());
for (NetworkInterface intf : interfaces) {
List<InetAddress> addrs = Collectionslist(intf
getInetAddresses());
for (InetAddress addr : addrs) {
if (!addrisLoopbackAddress()) {
String sAddr = addrgetHostAddress()toUpperCase();
boolean isIPv4 = InetAddressUtilsisIPv4Address(sAddr);
if (useIPv4) {
if (isIPv4) {
Logi("MyTag", isIPv4 + "--ipv4------------"
+ sAddr);
// return sAddr;
}
} else {
if (!isIPv4) {
int delim = sAddrindexOf('%'); // drop ip6 port
// suffix
String str = delim < 0 sAddr : sAddr
substring(0, delim);
Logi("MyTag", isIPv4 + "-no-ipv4------------"
+ str);
// return str;
}
}
}
}
}
} catch (Exception ex) {
} // for now eat exceptions
return "";
}[/mw_shl_code]
测试结果:手机、电视wifi情况下获取ip是正常的,电视插网线获取ip也是正常。
但是在软件试运行期间,出现电视盒子获取ip为0000,此时电视盒子的网络正常,经过测试分析,发现该网络路由是由管理员手动设置过ip段,
一般我们局域网ip类似于192168112 ,手动设置路电视盒子ip为10101107,此时ip获取错误,一直取不到这个ip,不知道什么原因导致的。
以上就是关于android中如何获取蹭网用户的ip地址,求详细编码全部的内容,包括:android中如何获取蹭网用户的ip地址,求详细编码、android 如何获取IPV6的地址、android快传怎样获得通信ip等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)