package com.netease.LDNetDiagnoUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import android.annotation.SuppressLint;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.DhcpInfo;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@SuppressLint("DefaultLocale")
public class LDNetUtil {
public static final String OPEN_IP = "";// 可ping的IP地址
public static final String OPERATOR_URL = "";
public static final String NETWORKTYPE_INVALID = "UNKNOWN";// 没有网络
public static final String NETWORKTYPE_WAP = "WAP"; // wap网络
public static final String NETWORKTYPE_WIFI = "WIFI"; // wifi网络
@SuppressWarnings({ "deprecation" })
public static String getNetWorkType(Context context) {
String mNetWorkType = null;
ConnectivityManager manager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (manager == null) {
return "ConnectivityManager not found";
}
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected()) {
String type = networkInfo.getTypeName();
if (type.equalsIgnoreCase("WIFI")) {
mNetWorkType = NETWORKTYPE_WIFI;
} else if (type.equalsIgnoreCase("MOBILE")) {
String proxyHost = android.net.Proxy.getDefaultHost();
if (TextUtils.isEmpty(proxyHost)) {
mNetWorkType = mobileNetworkType(context);
} else {
mNetWorkType = NETWORKTYPE_WAP;
}
}
} else {
mNetWorkType = NETWORKTYPE_INVALID;
}
return mNetWorkType;
}
/**
* 判断网络是否连接
*/
public static Boolean isNetworkConnected(Context context) {
ConnectivityManager manager = (ConnectivityManager) context
.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (manager == null) {
return false;
}
NetworkInfo networkinfo = manager.getActiveNetworkInfo();
if (networkinfo == null || !networkinfo.isAvailable()) {
return false;
}
return true;
}
public static String getMobileOperator(Context context) {
TelephonyManager telManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
if(telManager==null)
return "未知运营商";
String operator = telManager.getSimOperator();
if (operator != null) {
if (operator.equals("46000") || operator.equals("46002")
|| operator.equals("46007")) {
return "中国移动";
} else if (operator.equals("46001")) {
return "中国联通";
} else if (operator.equals("46003")) {
return "中国电信";
}
}
return "未知运营商";
}
/**
* 获取本机IP(wifi)
*/
public static String getLocalIpByWifi(Context context) {
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
if (wifiManager == null) {
return "wifiManager not found";
}
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
if (wifiInfo == null) {
return "wifiInfo not found";
}
int ipAddress = wifiInfo.getIpAddress();
return String.format("%d.%d.%d.%d", (ipAddress & 0xff),
(ipAddress >> 8 & 0xff), (ipAddress >> 16 & 0xff),
(ipAddress >> 24 & 0xff));
}
/**
* 获取本机IP(2G/3G/4G)
*/
public static String getLocalIpBy3G() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr
.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()
&& inetAddress instanceof Inet4Address) {
// if (!inetAddress.isLoopbackAddress() && inetAddress
// instanceof Inet6Address) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* wifi状态下获取网关
*/
public static String pingGateWayInWifi(Context context) {
String gateWay = null;
WifiManager wifiManager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
if (wifiManager == null) {
return "wifiManager not found";
}
DhcpInfo dhcpInfo = wifiManager.getDhcpInfo();
if (dhcpInfo != null) {
int tmp = dhcpInfo.gateway;
gateWay = String.format("%d.%d.%d.%d", (tmp & 0xff), (tmp >> 8 & 0xff),
(tmp >> 16 & 0xff), (tmp >> 24 & 0xff));
}
return gateWay;
}
/**
* 获取本地DNS
*/
public static String getLocalDns(String dns) {
Process process = null;
String str = "";
BufferedReader reader = null;
try {
process = Runtime.getRuntime().exec("getprop net." + dns);
reader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
str += line;
}
reader.close();
process.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
process.destroy();
} catch (Exception e) {
}
}
return str.trim();
}
/**
* 域名解析
*/
public static Map<String, Object> getDomainIp(String _dormain) {
Map<String, Object> map = new HashMap<String, Object>();
long start = 0;
long end = 0;
String time = null;
InetAddress[] remoteInet = null;
try {
start = System.currentTimeMillis();
remoteInet = InetAddress.getAllByName(_dormain);
if (remoteInet != null) {
end = System.currentTimeMillis();
time = (end - start) + "";
}
} catch (UnknownHostException e) {
end = System.currentTimeMillis();
time = (end - start) + "";
remoteInet = null;
e.printStackTrace();
} finally {
map.put("remoteInet", remoteInet);
map.put("useTime", time);
}
return map;
}
private static String mobileNetworkType(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager == null) {
return "TM==null";
}
switch (telephonyManager.getNetworkType()) {
case TelephonyManager.NETWORK_TYPE_1xRTT:// ~ 50-100 kbps
return "2G";
case TelephonyManager.NETWORK_TYPE_CDMA:// ~ 14-64 kbps
return "2G";
case TelephonyManager.NETWORK_TYPE_EDGE:// ~ 50-100 kbps
return "2G";
case TelephonyManager.NETWORK_TYPE_EVDO_0:// ~ 400-1000 kbps
return "3G";
case TelephonyManager.NETWORK_TYPE_EVDO_A:// ~ 600-1400 kbps
return "3G";
case TelephonyManager.NETWORK_TYPE_GPRS:// ~ 100 kbps
return "2G";
case TelephonyManager.NETWORK_TYPE_HSDPA:// ~ 2-14 Mbps
return "3G";
case TelephonyManager.NETWORK_TYPE_HSPA:// ~ 700-1700 kbps
return "3G";
case TelephonyManager.NETWORK_TYPE_HSUPA: // ~ 1-23 Mbps
return "3G";
case TelephonyManager.NETWORK_TYPE_UMTS:// ~ 400-7000 kbps
return "3G";
case TelephonyManager.NETWORK_TYPE_EHRPD:// ~ 1-2 Mbps
return "3G";
case TelephonyManager.NETWORK_TYPE_EVDO_B: // ~ 5 Mbps
return "3G";
case TelephonyManager.NETWORK_TYPE_HSPAP:// ~ 10-20 Mbps
return "3G";
case TelephonyManager.NETWORK_TYPE_IDEN:// ~25 kbps
return "2G";
case TelephonyManager.NETWORK_TYPE_LTE:// ~ 10+ Mbps
return "4G";
case TelephonyManager.NETWORK_TYPE_UNKNOWN:
return "UNKNOWN";
default:
return "4G";
}
}
/**
* 输入流转变成字符串
*/
public static String getStringFromStream(InputStream is) {
byte[] bytes = new byte[1024];
int len = 0;
String res = "";
try {
while ((len = is.read(bytes)) != -1) {
res = res + new String(bytes, 0, len, "gbk");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return res;
}
}