Changeset 844:253db395cffb

Show
Ignore:
Timestamp:
07/28/08 16:13:00 (4 months ago)
Author:
Phil <phil@secdev.org>
Message:

Adapted M. Saitoh patch to use correct loopback interface name on *BSD

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • scapy/arch.py

    r840 r844  
    2424OPENBSD=sys.platform.startswith("openbsd") 
    2525FREEBSD=sys.platform.startswith("freebsd") 
     26NETBSD = sys.platform.startswith("netbsd") 
    2627DARWIN=sys.platform.startswith("darwin") 
    2728BIG_ENDIAN= struct.pack("H",1) == "\x00\x01" 
     
    3334else: 
    3435    DNET=PCAP=1 
     36 
     37if OPENBSD or FREEBSD or NETBSD or DARWIN: 
     38    LOOPBACK_NAME="lo0" 
     39else: 
     40    LOOPBACK_NAME="lo" 
     41 
    3542     
    3643 
     
    119126if DNET: 
    120127    def get_if_raw_hwaddr(iff): 
    121         if iff[:2] == "lo"
     128        if iff[:2] == LOOPBACK_NAME
    122129            return (772, '\x00'*6) 
    123130        try: 
     
    149156            return pcap.lookupdev() 
    150157        except Exception: 
    151             return 'lo' 
     158            return LOOPBACK_NAME 
    152159 
    153160    def attach_filter(s, filter): 
     
    167174    def get_working_if(): 
    168175        for i in get_if_list(): 
    169             if i == 'lo':                 
     176            if i == LOOPBACK_NAME:                 
    170177                continue 
    171178            ifflags = struct.unpack("16xH14x",get_if(i,SIOCGIFFLAGS))[0] 
    172179            if ifflags & IFF_UP: 
    173180                return i 
    174         return "lo" 
     181        return LOOPBACK_NAME 
    175182    def attach_filter(s, filter): 
    176183        # XXX We generate the filter on the interface conf.iface  
     
    307314        routes = [] 
    308315        s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    309         ifreq = ioctl(s, SIOCGIFADDR,struct.pack("16s16x","lo")) 
     316        ifreq = ioctl(s, SIOCGIFADDR,struct.pack("16s16x",LOOPBACK_NAME)) 
    310317        addrfamily = struct.unpack("h",ifreq[16:18])[0] 
    311318        if addrfamily == socket.AF_INET: 
    312             ifreq2 = ioctl(s, SIOCGIFNETMASK,struct.pack("16s16x","lo")) 
     319            ifreq2 = ioctl(s, SIOCGIFNETMASK,struct.pack("16s16x",LOOPBACK_NAME)) 
    313320            msk = socket.ntohl(struct.unpack("I",ifreq2[20:24])[0]) 
    314321            dst = socket.ntohl(struct.unpack("I",ifreq[20:24])[0]) & msk 
    315322            ifaddr = inet_ntoa(ifreq[20:24]) 
    316             routes.append((dst, msk, "0.0.0.0", "lo", ifaddr)) 
     323            routes.append((dst, msk, "0.0.0.0", LOOPBACK_NAME, ifaddr)) 
    317324        else: 
    318325            warning("Interface lo: unkown address family (%i)"% addrfamily) 
  • scapy/route.py

    r840 r844  
    11import socket 
    2 from arch import read_routes,get_if_addr 
     2from arch import read_routes,get_if_addr,LOOPBACK_NAME 
    33from utils import atol,ltoa,itom 
    44from config import conf 
     
    128128            aa = atol(a) 
    129129            if aa == dst: 
    130                 pathes.append((0xffffffffL,("lo",a,"0.0.0.0"))) 
     130                pathes.append((0xffffffffL,(LOOPBACK_NAME,a,"0.0.0.0"))) 
    131131            if (dst & m) == (d & m): 
    132132                pathes.append((m,(i,a,gw))) 
     
    134134            if verbose: 
    135135                warning("No route found (no default route?)") 
    136             return "lo","0.0.0.0","0.0.0.0" #XXX linux specific! 
     136            return LOOPBACK_NAME,"0.0.0.0","0.0.0.0" #XXX linux specific! 
    137137        # Choose the more specific route (greatest netmask). 
    138138        # XXX: we don't care about metrics 
     
    153153#XXX use "with" 
    154154_betteriface = conf.route.route("0.0.0.0", verbose=0)[0] 
    155 if _betteriface != "lo": #XXX linux specific... 
     155if _betteriface != LOOPBACK_NAME: 
    156156    conf.iface = _betteriface 
    157157del(_betteriface)