package com.num.helpers; import java.net.InetAddress; import java.net.UnknownHostException; import android.util.Log; import com.num.models.Measure; import com.num.models.Ping; import com.num.models.Traceroute; import com.num.models.TracerouteEntry; import com.num.utils.CommandLineUtil; import com.num.utils.ParseUtil; public class TracerouteHelper { public static CommandLineUtil cmdUtil; public static final String SERVER_ADDRESS = "cc.gatech.edu"; public static TracerouteEntry TraceHelp(String ipDst, int index) { String cmd = "ping"; String options = "-c "+1 + " -t "+index; String output = ""; cmdUtil = new CommandLineUtil(); Log.d("TraceWorker", ""+options); output = cmdUtil.runCommand(cmd, ipDst, options); //result += (output + "\n"); TracerouteEntry hop = parseResult(output, index); return hop; } static TracerouteEntry parseResult(String result, int index) { String ipAddr = ""; String ipName=""; String ipBits = ""; boolean found = false; String parsedResult= ""; int pos; String rtt = ""; //int hop = startindex; for(pos=0; pos<result.length(); pos++) { parsedResult = ""; if(result.charAt(pos)=='F') { found = true; } if(found==true){ pos+=5; while(result.charAt(pos)!=' ') { parsedResult += result.charAt(pos); pos++; } break; } } if(found==true) { try { ipAddr=InetAddress.getByName(parsedResult).toString(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); ipAddr=parsedResult; } if(ipAddr.indexOf('/')!=-1) { ipName = ipAddr.substring(0,ipAddr.indexOf('/')); ipBits = ipAddr.substring(ipAddr.indexOf('/')+1); } else { ipBits = ipAddr; } //rtt = getHopRTT(parsedResult); Log.d("TraceHelp","Parsed result "+ parsedResult); return new TracerouteEntry(ipBits,ipName, ""+rtt, index); } else { return new TracerouteEntry("***","*", "*", index); } } static String getHopRTT(String dst) { String ipDst = dst; String cmd = "ping"; String options = "-c 3"; String output = ""; double average; cmdUtil = new CommandLineUtil(); output = cmdUtil.runCommand(cmd, ipDst, options); Measure ping_measurement = ParseUtil.PingParser(output); average = ping_measurement.getAverage(); if(average!=-1) return ""+average; else return "*"; } }