get_if_addr for macOS vlan iface not returning correct address
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
Could you share conf.route ?
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
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
@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 :/