Changeset 844:253db395cffb
- 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
| r840 |
r844 |
|
| 24 | 24 | OPENBSD=sys.platform.startswith("openbsd") |
|---|
| 25 | 25 | FREEBSD=sys.platform.startswith("freebsd") |
|---|
| | 26 | NETBSD = sys.platform.startswith("netbsd") |
|---|
| 26 | 27 | DARWIN=sys.platform.startswith("darwin") |
|---|
| 27 | 28 | BIG_ENDIAN= struct.pack("H",1) == "\x00\x01" |
|---|
| … | … | |
| 33 | 34 | else: |
|---|
| 34 | 35 | DNET=PCAP=1 |
|---|
| | 36 | |
|---|
| | 37 | if OPENBSD or FREEBSD or NETBSD or DARWIN: |
|---|
| | 38 | LOOPBACK_NAME="lo0" |
|---|
| | 39 | else: |
|---|
| | 40 | LOOPBACK_NAME="lo" |
|---|
| | 41 | |
|---|
| 35 | 42 | |
|---|
| 36 | 43 | |
|---|
| … | … | |
| 119 | 126 | if DNET: |
|---|
| 120 | 127 | def get_if_raw_hwaddr(iff): |
|---|
| 121 | | if iff[:2] == "lo": |
|---|
| | 128 | if iff[:2] == LOOPBACK_NAME: |
|---|
| 122 | 129 | return (772, '\x00'*6) |
|---|
| 123 | 130 | try: |
|---|
| … | … | |
| 149 | 156 | return pcap.lookupdev() |
|---|
| 150 | 157 | except Exception: |
|---|
| 151 | | return 'lo' |
|---|
| | 158 | return LOOPBACK_NAME |
|---|
| 152 | 159 | |
|---|
| 153 | 160 | def attach_filter(s, filter): |
|---|
| … | … | |
| 167 | 174 | def get_working_if(): |
|---|
| 168 | 175 | for i in get_if_list(): |
|---|
| 169 | | if i == 'lo': |
|---|
| | 176 | if i == LOOPBACK_NAME: |
|---|
| 170 | 177 | continue |
|---|
| 171 | 178 | ifflags = struct.unpack("16xH14x",get_if(i,SIOCGIFFLAGS))[0] |
|---|
| 172 | 179 | if ifflags & IFF_UP: |
|---|
| 173 | 180 | return i |
|---|
| 174 | | return "lo" |
|---|
| | 181 | return LOOPBACK_NAME |
|---|
| 175 | 182 | def attach_filter(s, filter): |
|---|
| 176 | 183 | # XXX We generate the filter on the interface conf.iface |
|---|
| … | … | |
| 307 | 314 | routes = [] |
|---|
| 308 | 315 | 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)) |
|---|
| 310 | 317 | addrfamily = struct.unpack("h",ifreq[16:18])[0] |
|---|
| 311 | 318 | if addrfamily == socket.AF_INET: |
|---|
| 312 | | ifreq2 = ioctl(s, SIOCGIFNETMASK,struct.pack("16s16x","lo")) |
|---|
| | 319 | ifreq2 = ioctl(s, SIOCGIFNETMASK,struct.pack("16s16x",LOOPBACK_NAME)) |
|---|
| 313 | 320 | msk = socket.ntohl(struct.unpack("I",ifreq2[20:24])[0]) |
|---|
| 314 | 321 | dst = socket.ntohl(struct.unpack("I",ifreq[20:24])[0]) & msk |
|---|
| 315 | 322 | 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)) |
|---|
| 317 | 324 | else: |
|---|
| 318 | 325 | warning("Interface lo: unkown address family (%i)"% addrfamily) |
|---|
| r840 |
r844 |
|
| 1 | 1 | import socket |
|---|
| 2 | | from arch import read_routes,get_if_addr |
|---|
| | 2 | from arch import read_routes,get_if_addr,LOOPBACK_NAME |
|---|
| 3 | 3 | from utils import atol,ltoa,itom |
|---|
| 4 | 4 | from config import conf |
|---|
| … | … | |
| 128 | 128 | aa = atol(a) |
|---|
| 129 | 129 | if aa == dst: |
|---|
| 130 | | pathes.append((0xffffffffL,("lo",a,"0.0.0.0"))) |
|---|
| | 130 | pathes.append((0xffffffffL,(LOOPBACK_NAME,a,"0.0.0.0"))) |
|---|
| 131 | 131 | if (dst & m) == (d & m): |
|---|
| 132 | 132 | pathes.append((m,(i,a,gw))) |
|---|
| … | … | |
| 134 | 134 | if verbose: |
|---|
| 135 | 135 | 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! |
|---|
| 137 | 137 | # Choose the more specific route (greatest netmask). |
|---|
| 138 | 138 | # XXX: we don't care about metrics |
|---|
| … | … | |
| 153 | 153 | #XXX use "with" |
|---|
| 154 | 154 | _betteriface = conf.route.route("0.0.0.0", verbose=0)[0] |
|---|
| 155 | | if _betteriface != "lo": #XXX linux specific... |
|---|
| | 155 | if _betteriface != LOOPBACK_NAME: |
|---|
| 156 | 156 | conf.iface = _betteriface |
|---|
| 157 | 157 | del(_betteriface) |
|---|