/* TraceUser.amirx traceroute and get lattitude and longitude of routers for display with WorldMap. */ OPTIONS RESULTS OPTIONS FAILAT 30 NL='0a'x ;ib=0 ;mi=0 ;ai=0;st=0 "GETCHANNEL" channel=RESULT IF WORDS(channel)=0 THEN DO cecho("MapMatch ERROR: you are not on a channel!") exit END IF SHOW('Ports','WORLD.1') THEN ADDRESS 'WORLD.1' 'CLEAR' IF ~SHOW('Ports','WORLD.1') THEN DO ADDRESS 'COMMAND' 'Run >NIL: c:worldmap' ADDRESS 'COMMAND' 'SYS:RexxC/WaitForPort MIAMI.1' END IF ~SHOW('Ports','WORLD.1') THEN DO cecho("MapMatch ERROR: could not find c:worldmap") exit END ADDRESS 'WORLD.1' 'WRITE Tracing ' user ADDRESS 'WORLD.1' 'WRITE Finding user-locations on ' channel "GETUSERS" users=RESULT ok=RC SAY users ok IF ok~=0 THEN EXIT pre='httpget -q "http://netgeo.caida.org/perl/netgeo.cgi?target=' ante='&method=getRecord&nonblocking=true" >RAM:T/trace_pos.temp' count=0;hit=0 user_num=WORDS(users) DO loop=1 TO user_num count=count+1 user=WORD(users,count) user=STRIP(user,'B','@+') "USERHOST" user host=RESULT ok=rc IF ok~=0 THEN EXIT start=POS('@',host) ip=SUBSTR(host,start+1) SAY user count ip cmd=pre||ip||ante say count ADDRESS 'COMMAND' 'delete >NIL: RAM:T/trace_pos.temp' ADDRESS 'COMMAND' cmd IF EXISTS('Ram:T/trace_pos.temp') THEN DO ok=open(trace_pos,'RAM:T/trace_pos.temp','R') first=0 DO UNTIL EOF(trace_pos) all=readch(trace_pos,2000) lat1=POS('LAT:',all) long1=POS('LONG:',all) IF (lat1*long1)~=0 THEN DO lat2=POS('<',all,lat1) lat=SUBSTR(all,lat1+4,lat2-lat1-7) long2=POS('<',all,long1) long=SUBSTR(all,long1+5,long2-long1-8) TRUNC(long) TRIM(lat) IF (lat+long)~=0 THEN DO hit=hit+1 say lat long first ADDRESS 'WORLD.1' 'MOVE' long lat ADDRESS 'WORLD.1' 'DOT' long lat END END END close(trace_pos) END ADDRESS 'WORLD.1' 'WRITE Located' hit ' users on ' channel END