import java.io.*;
import java.util.*;
import java.net.*;
import java.applet.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class getGPSLocation extends Applet{
//public class getGPSLocation{
//public static void main(String[] args) {
public void init(){
String result = null;
if (isWindows()) {
System.out.println("\nThis is Windows Machine");
result=getWindows();
} else if (isMac()) {
System.out.println("\nThis is Mac Machine");
result=getMac();
} else {
System.out.println("\nYour OS is not support!!");
}
//System.out.println(result);
}
public static String getWindows(){
String result = null;
try {
ArrayList ssidList = new ArrayList();
ArrayList bssidList = new ArrayList();
ArrayList rssiList = new ArrayList();
Process p = Runtime.getRuntime().exec("netsh wlan show networks mode=bssid");
BufferedReader in = new BufferedReader(
new InputStreamReader(p.getInputStream()));
String line = null;
String signal = null;
String ssidStr = null;
while ((line = in.readLine()) != null) {
Pattern p1 = Pattern.compile("(SSID\\s\\d+\\s:)\\s([\\w\\s]*)");
Matcher m1 = p1.matcher(line);
if(m1.find()){
ssidStr = m1.group(2);
ssidStr = ssidStr.replaceAll(" ","%20");
ssidList.add(ssidStr);
}
Pattern p2 = Pattern.compile("(BSSID\\s1\\s*:)\\s((.?)*)");
Matcher m2 = p2.matcher(line);
if(m2.find()){
bssidList.add(m2.group(2));
}
Pattern p3 = Pattern.compile("(Signal\\s*):\\s((.?)*)");
Matcher m3 = p3.matcher(line);
if(m3.find()){
signal = m3.group(2);
signal = signal.replaceAll("%","");
signal = signal.replaceAll(" ","");
signal = "-"+signal;
rssiList.add(signal);
}
}
int arraySize=ssidList.size();
if(arraySize==0){
result="I don't know where the target is";
}
else{
result=googleLookup(bssidList,ssidList,rssiList);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
public static String googleLookup(ArrayList bssidList,ArrayList ssidList,ArrayList rssiList){
String result = null;
try {
int j=0;
String queryString = "https://maps.googleapis.com/maps/api/browserlocation/json?browser=firefox&sensor=true";
while(j<ssidList.size()){
queryString+="&wifi=mac:";
queryString+=bssidList.get(j);
queryString+="%7C";
queryString+="ssid:";
queryString+=ssidList.get(j);
queryString+="%7C";
queryString+="ss:";
queryString+=rssiList.get(j);
j++;
}
//Get geocoordinates / Longitude and Latitude
String geoCoordinates = null;
//System.out.println("Query string: "+queryString);
URL url = new URL(queryString);
URLConnection urlc = url.openConnection();
urlc.setRequestProperty("User-Agent", "Mozilla 5.0 (Windows; U; "+ "Windows NT 5.1; en-US; rv:1.8.0.11) ");
BufferedReader reader = new BufferedReader(new InputStreamReader(urlc.getInputStream()));
for (String output; (output = reader.readLine()) != null;) {
if(output.indexOf("18000.0")>0){
result+="Location is not accurate\n";
System.out.println("Location is not accurate");
}
else{
if(output.indexOf("lat")>0){
output = output.replace("\"lat\" : ","");
output = output.replaceAll("^\\s+", "");
geoCoordinates = output;
result+="Latitude: ";
result+=output;
System.out.println("Latitude: "+output);
}
if(output.indexOf("lng")>0){
output = output.replace("\"lng\" : ","");
output = output.replaceAll("^\\s+", "");
geoCoordinates += output;
result+="Longitude: ";
result+=output;
System.out.println("Longitude: "+output);
}
}
}
//Reverse geocoordinates to street address
String reverseGeo = "https://maps.googleapis.com/maps/geo?q="+geoCoordinates+"&output=json&sensor=true_or_false";
System.out.println(reverseGeo);
URL url1 = new URL(reverseGeo);
URLConnection urlc1 = url1.openConnection();
urlc1.setRequestProperty("User-Agent", "Mozilla 5.0 (Windows; U; "+ "Windows NT 5.1; en-US; rv:1.8.0.11) ");
BufferedReader reader1 = new BufferedReader(new InputStreamReader(urlc1.getInputStream()));
for (String output1; (output1 = reader1.readLine()) != null;) {
if(output1.indexOf("address")>0){
output1 = output1.replace("\"address\": ","");
output1 = output1.replace("\",","");
output1 = output1.replace("\"","");
output1 = output1.replaceAll("^\\s+", "");
result+="Address is ";
result+=output1;
System.out.println("Address is "+output1);
}
}
String mapAddress = "http://maps.google.com/maps?q="+geoCoordinates+"+%28You+are+located+here%29&iwloc=A&hl=en";
result+="\n"+mapAddress;
System.out.println("\n"+mapAddress);
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
public static String getMac(){
String result = null;
try {
Process p = Runtime.getRuntime().exec("/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s");
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
String ssidStr = null;
String signal = null;
String queryString = "https://maps.googleapis.com/maps/api/browserlocation/json?browser=firefox&sensor=true";
ArrayList ssidList = new ArrayList();
ArrayList bssidList = new ArrayList();
ArrayList rssiList = new ArrayList();
line = in.readLine();
while ((line = in.readLine()) != null) {
line = line.replaceAll("^\\s+", "");
//Pattern p1 = Pattern.compile("((.?)*\\s\\w*):(\\w*:\\w*:\\w*:\\w*:\\w*)\\s((.?)*)\\s(\\d+)");
Pattern p1 = Pattern.compile("((.?)+)\\s(..:..:..:..:..:..)\\s(-\\d*)");
Matcher m1 = p1.matcher(line);
if(m1.find()){
ssidStr = m1.group(1);
ssidStr = ssidStr.replaceAll(" ","%20");
ssidList.add(ssidStr);
//System.out.println("ssid: "+ssidStr);
bssidList.add(m1.group(3));
//System.out.println("bssid: "+m1.group(3));
signal = m1.group(4);
signal = signal.replaceAll(" ","");
//System.out.println("signal: "+signal);
rssiList.add(signal);
}
}
int arraySize=ssidList.size();
if(arraySize==0){
result="I don't know where the target is";
System.out.println("I don't know where the target is");
}
else{
result=googleLookup(bssidList,ssidList,rssiList);
}
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
public static boolean isWindows() {
String os = System.getProperty("os.name").toLowerCase();
// windows
return (os.indexOf("win") >= 0);
}
public static boolean isMac() {
String os = System.getProperty("os.name").toLowerCase();
// Mac
return (os.indexOf("mac") >= 0);
}
public static boolean isLinux() {
String os = System.getProperty("os.name").toLowerCase();
// linux or unix
return (os.indexOf("nix") >= 0 || os.indexOf("nux") >= 0);
}
}