On Tue, May 14, 2002 at 06:52:33PM +0200, Renaud Deraison wrote:
> On Tue, May 14, 2002 at 10:58:21AM -0500, Russ Foster wrote:
> > Can anyone offer an avenue of direction on what I should look into next? Or
> > how to go about determining where, exactly, this port is being blocked?
> 
> Use firewalk. Or you can even use this stupid NASL script, which should
> tell you at which hop the packet was blocked (be sure to allow icmp
> unreachable messages inbound).
> 
> Usage :
> 
> nasl -t ip.of.the.remote.host fwalk.nasl

And the script I sent was wrong (duh) - it would send packets to port
23, not 1241. 

Corrected version is attached.

#
# The script code starts here
#

finished = 0;
ttl = 1;
ip_id = rand();
src = this_host();
dst = get_host_ip();
error = 0;

str_ip = string(dst);
z = strstr(str_ip, ".");

filter = string("icmp and ((icmp[0]==3) or (icmp[0]==11)) ",
                "and (icmp[24]==", str_ip-z,") ");
                
z[0]=" ";
t = strstr(z, ".");
filter = filter + string("and (icmp[25]==",z-t,") ");
t[0]=" ";
z = strstr(t, ".");
filter = filter + string("and (icmp[26]==", t-z, ") ");
z[0]=" ";
filter = filter + string("and (icmp[27]==", z, ")");


icmpfilter = filter;

# we'll send packets to port 1241, with sport 10123

sport = 10123;
dport = 1241;

tcpfilter = string("tcp and src port ", dport, " and dst port ", sport);

filter = string("dst host ", src, " and ((", tcpfilter, ") or (", icmpfilter, "))");


d = get_host_ip();
prev = string("");

#
# the traceroute itself
#

while(!finished)
{
 display("Hop #", ttl, "\n");
 ip = forge_ip_packet(ip_v : 4, ip_hl:5, ip_tos:0, ip_id:ip_id,
                      ip_len:20, ip_off:0, ip_p:IPPROTO_TCP, 
                      ip_src:src, ip_ttl:ttl);

 tcp = forge_tcp_packet(ip:ip,
                               th_sport: sport,
                               th_dport: dport,
                               th_flags:TH_SYN,
                               th_seq: 3984,
                               th_ack: 0,
                               th_x2: 0,
                               th_off: 5,
                               th_win: 8192,
                               th_urp: 0);

 
 rep = 0;
 for(i=0;((i<5) && (!rep));i=i+1)
 {
 rep = send_packet(tcp, pcap_active:TRUE, pcap_filter:filter,pcap_timeout:1);
 }

 if(!rep){
        display("Packet seems to have been blocked ", ttl, " hops away\n");
        exit(0);
        }
 else
 {
 proto = get_ip_element(ip:rep, element:"ip_p");
 if(proto == IPPROTO_TCP){
        flag = get_tcp_element(tcp:rep, element:"th_flags");
        if(flag & TH_ACK){
                display("Packet arrived safely\n");
                exit(0);
                }
        }
        
        
  ttl = ttl+1;
 }
 
 if(ttl > 50)
 {
  display("Uh-ho\n");
  exit(0);
 }
}

Reply via email to