Os comutadores já podem estar enviando as informações desejadas. Se eles são switches da Cisco, por padrão, eles estarão usando um processo chamado CDP (Cisco Discovery Protocol), que fornecerá informações sobre o switch onde ele está conectado.
Você pode usar o tcpdump para visualizar essas informações com o seguinte (substituindo a interface apropriada):
tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether[20:2] == 0x2000'
A versão padrão do CDP é o LLDP (protocolo de descoberta de camada de link). Alguns fornecedores terão isso ativado por padrão e outros desativados, para que sua milhagem varie. Existem algumas implementações de LLDP para Linux, mas se você quiser algo semelhante ao acima, você pode usar isto (configurar o LLDP em um switch Cisco e testar o abaixo, que é mais consistente com o acima):
tcpdump -nn -v -i eth0 -s 1500 -c 1 'ether proto 0x88cc'
Exceto isso, eu diria que uma modificação da opção 1 que você fornecer pode funcionar, no entanto, em vez de enviar um ICMP de broadcast, você pode tentar um ICMP normal (para um host que não esteja na tabela ARP) e capturar o ARP pacotes. Se o pedido ARP é enviado eth0 e você recebe em eth1 e eth3, então você sabe que eles estão na mesma VLAN. O comando mais simples para isso é o seguinte:
tcpdump -i eth0 arp