scapy icon indicating copy to clipboard operation
scapy copied to clipboard

get_if_addr for macOS vlan iface not returning correct address

Open jhgorse opened this issue 8 months ago • 4 comments

Brief description

get_if_addr(iface="vlan0") returns 0.0.0.0 instead of the IP address.

Scapy version

2.6.1

Python version

3.12.3

Operating system

macOS 15.3.2

Additional environment information

No response

How to reproduce

Expect get_if_hwaddr("vlan0") to return 10.0.2.7, instead we see 0.0.0.0:

vlan_ifaces_list=["vlan1", "vlan0"]
for iface in vlan_ifaces_list:
    print(f"get_if_hwaddr({iface}) \t{get_if_hwaddr(iface)}")
    print(f"get_if_addr({iface}) \t{get_if_addr(iface)}")
>>>
get_if_hwaddr(vlan1) 	00:e0:4c:68:24:00
get_if_addr(vlan1) 	0.0.0.0
get_if_hwaddr(vlan0) 	00:e0:4c:08:1b:1b
get_if_addr(vlan0) 	0.0.0.0

read_routes() has the correct information in columns 3 and 4, but it appears to be drawing from column 2, the gateway entry if I am reading this right.

s = set() # there will be redundencies so we'll use set to remove them
for line in read_routes():
    s.add(line[2:5])
s

>>>
{
 ('0.0.0.0', 'vlan0', '10.0.2.7'),
 ('0.0.0.0', 'vlan1', '10.0.2.11'),
 ('10.0.2.7', 'vlan1', '10.0.2.11'),
snip
}

The IPs are indicated by ifconfig:

vlan1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=6063<RXCSUM,TXCSUM,TSO4,TSO6,PARTIAL_CSUM,ZEROINVERT_CSUM>
	ether 00:e0:4c:68:24:00
	inet 10.0.2.11 netmask 0xffff0000 broadcast 10.0.255.255
	nd6 options=201<PERFORMNUD,DAD>
	vlan: 2 parent interface: en7
	media: autoselect (1000baseT <full-duplex>)
	status: active
vlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	options=6063<RXCSUM,TXCSUM,TSO4,TSO6,PARTIAL_CSUM,ZEROINVERT_CSUM>
	ether 00:e0:4c:08:1b:1b
	inet 10.0.2.7 netmask 0xffff0000 broadcast 10.0.255.255
	nd6 options=201<PERFORMNUD,DAD>
	vlan: 2 parent interface: en11
	media: autoselect (1000baseT <full-duplex>)
	status: active
snip

Actual result

get_if_addr("vlan1") 	0.0.0.0
get_if_addr("vlan0") 	0.0.0.0

Expected result

get_if_addr("vlan1") 	10.0.2.11
get_if_addr("vlan0") 	10.0.2.7

Related resources

No response

jhgorse avatar Mar 27 '25 03:03 jhgorse

Could you share conf.route ?

gpotter2 avatar Mar 27 '25 07:03 gpotter2

I have a similar behavior with Tailscale:

>>> get_if_hwaddr("utun7")
'00:00:00:00:00:00'

Here are some helpful outputs:

ifconfig utun7 
utun7: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1280
	options=6460<TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
	inet6 fe80::6f7a:67ff:feb8:a001%utun7 prefixlen 64 scopeid 0x2a 
	inet 100.42.113.28 --> 100.42.113.28 netmask 0xffffffff
	inet6 fd7e:125c:aae0::1b0 prefixlen 48 
	nd6 options=201<PERFORMNUD,DAD>

>>> conf.route
Network          Netmask          Gateway         Iface  Output IP       Metric
0.0.0.0          0.0.0.0          0.0.0.0         utun7  100.42.113.28     1     

guedou avatar Mar 27 '25 13:03 guedou

Could you share conf.route ?

from scapy import config
config.conf.route
>>>

Network          Netmask          Gateway      Iface      Output IP     Metric
0.0.0.0          0.0.0.0          192.168.0.1  en0        192.168.0.93  1     
0.0.0.0          0.0.0.0          0.0.0.0      en7        10.0.1.7      1     
0.0.0.0          0.0.0.0          10.0.1.7     en11       10.0.1.11     1     
0.0.0.0          0.0.0.0          10.0.2.7     vlan0      10.0.2.11     1     
0.0.0.0          0.0.0.0          0.0.0.0      bridge100  10.211.55.2   1     
0.0.0.0          0.0.0.0          0.0.0.0      bridge101  10.37.129.2   1     
0.0.0.0          0.0.0.0          0.0.0.0      vlan1      10.0.2.7      1     
0.0.0.0          0.0.0.0          10.8.0.1     utun10     10.8.0.2      1     
10.0.0.0         255.255.255.255  10.8.0.1     utun10     10.8.0.2      1     
10.0.0.0         255.255.255.255  0.0.0.0      vlan0      10.0.2.11     1     
10.0.0.0         255.255.255.255  0.0.0.0      vlan1      10.0.2.7      1     
10.0.1.0         255.255.255.255  0.0.0.0      en7        10.0.1.7      1     
10.0.1.0         255.255.255.255  0.0.0.0      en11       10.0.1.11     1     
10.0.1.11        255.255.255.255  0.0.0.0      en11       10.0.1.11     1     
10.0.1.11        255.255.255.255  0.0.0.0      en7        10.0.1.7      1     
10.0.1.11        255.255.255.255  0.0.0.0      lo0        10.0.1.11     1     
10.0.1.255       255.255.255.255  0.0.0.0      en7        10.0.1.7      1     
10.0.1.7         255.255.255.255  0.0.0.0      en7        10.0.1.7      1     
10.0.1.7         255.255.255.255  0.0.0.0      lo0        10.0.1.7      1     
10.0.1.7         255.255.255.255  0.0.0.0      en11       10.0.1.11     1     
10.0.1.7         255.255.255.255  0.0.0.0      en11       10.0.1.11     1     
10.0.2.11        255.255.255.255  0.0.0.0      vlan0      10.0.2.11     1     
10.0.2.11        255.255.255.255  0.0.0.0      lo0        10.0.2.11     1     
10.0.2.7         255.255.255.255  0.0.0.0      vlan0      10.0.2.11     1     
10.0.2.7         255.255.255.255  0.0.0.0      vlan0      10.0.2.11     1     
10.0.2.7         255.255.255.255  0.0.0.0      lo0        10.0.2.7      1     
10.0.2.7         255.255.255.255  0.0.0.0      vlan1      10.0.2.7      1     
10.0.255.255     255.255.255.255  0.0.0.0      vlan0      10.0.2.11     1     
10.211.55.0      255.255.255.255  0.0.0.0      bridge100  10.211.55.2   1     
10.211.55.255    255.255.255.255  0.0.0.0      bridge100  10.211.55.2   1     
10.37.129.0      255.255.255.255  0.0.0.0      bridge101  10.37.129.2   1     
10.37.129.255    255.255.255.255  0.0.0.0      bridge101  10.37.129.2   1     
10.8.0.0         255.255.255.255  10.8.0.2     utun10     10.8.0.2      1     
10.8.0.1         255.255.255.255  0.0.0.0      utun10     10.8.0.2      1     
10.8.0.1         255.255.255.255  0.0.0.0      utun10     10.8.0.2      1     
10.8.0.2         255.255.255.255  10.8.0.2     utun10     10.8.0.2      1     
127.0.0.0        255.255.255.0    127.0.0.1    lo0        127.0.0.1     1     
127.0.0.1        255.255.255.255  127.0.0.1    lo0        127.0.0.1     1     
169.254.0.0      255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
169.254.0.0      255.255.255.255  0.0.0.0      en7        10.0.1.7      1     
169.254.0.0      255.255.255.255  0.0.0.0      en11       10.0.1.11     1     
169.254.0.0      255.255.255.255  0.0.0.0      vlan0      10.0.2.11     1     
169.254.0.0      255.255.255.255  0.0.0.0      vlan1      10.0.2.7      1     
169.254.48.132   255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
192.168.0.0      255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
192.168.0.1      255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
192.168.0.1      255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
192.168.0.164    255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
192.168.0.208    255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
192.168.0.255    255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
192.168.0.30     255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
192.168.0.5      255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
192.168.0.93     255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
192.168.0.93     255.255.255.255  0.0.0.0      lo0        192.168.0.93  1     
192.168.0.94     255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
224.0.0.0        240.255.255.0    0.0.0.0      en0        192.168.0.93  1     
224.0.0.0        240.255.255.0    0.0.0.0      en7        10.0.1.7      1     
224.0.0.0        240.255.255.0    0.0.0.0      en11       10.0.1.11     1     
224.0.0.0        240.255.255.0    0.0.0.0      vlan0      10.0.2.11     1     
224.0.0.0        240.255.255.0    0.0.0.0      vlan1      10.0.2.7      1     
224.0.0.0        240.255.255.0    0.0.0.0      utun10     10.8.0.2      1     
224.0.0.251      255.255.255.255  0.0.0.0      en7        10.0.1.7      1     
224.0.0.251      255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
224.0.0.251      255.255.255.255  0.0.0.0      en11       10.0.1.11     1     
224.0.0.251      255.255.255.255  0.0.0.0      vlan0      10.0.2.11     1     
224.0.0.251      255.255.255.255  0.0.0.0      vlan1      10.0.2.7      1     
224.0.0.252      255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
239.255.255.250  255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
255.255.255.255  255.255.255.255  0.0.0.0      en0        192.168.0.93  1     
255.255.255.255  255.255.255.255  0.0.0.0      en7        10.0.1.7      1     
255.255.255.255  255.255.255.255  0.0.0.0      en11       10.0.1.11     1     
255.255.255.255  255.255.255.255  0.0.0.0      vlan0      10.0.2.11     1     
255.255.255.255  255.255.255.255  0.0.0.0      vlan1      10.0.2.7      1     
255.255.255.255  255.255.255.255  0.0.0.0      utun10     10.8.0.2      1

jhgorse avatar Mar 27 '25 13:03 jhgorse

@guedou For the MAC address I'm less surprised. lo has 00:00:00:00:00:00, so a utun could as well.

The issue here is IP, which does look broken. It would be nice to have a reproducible setup though, I don't have a MAC :/

gpotter2 avatar Mar 29 '25 11:03 gpotter2