#!/usr/bin/python3 import glob import os import select import socket def scan_nic(nicidx): srvs = {} s6 = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM) s6.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 1) s6.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1) s6.bind(('::', 0)) msg = b'M-SEARCH * HTTP/1.1\r\nHOST: [ff02::c]:1900\r\nMAN: "ssdp:discover"\r\nST: urn:dmtf-org:service:redfish-rest:1\r\nMX: 3\r\n\r\n' s6.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, nicidx) s6.sendto(msg, ('ff02::c', 1900)) (rsp, peer) = s6.recvfrom(9000) print('{}%{}'.format(peer[0], nicidx)) if __name__ == '__main__': for nic in glob.glob('/sys/class/net/*'): nic = os.path.basename(nic) try: driver = os.readlink('/sys/class/net/{}/device/driver/module'.format(nic)) except: continue if 'cdc_ether' not in driver: continue idx = int(open('/sys/class/net/{}/ifindex'.format(nic)).read()) break scan_nic(idx)