Fuera de abrir un zócalo separado en cada interfaz como se sugiere Glomek, la única forma que conozco para hacer esto definitivamente en Windows es utilizar un conector directo, por ejemplo,
SOCKET s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
Cada recibir de este socket ser un IP packet, que contiene las direcciones de origen y de destino. El programa en el que trabajo requiere que coloque el socket en modo promiscuo usando la opción SIO_RCVALL. Hacer esto significa que obtengo todos los paquetes de IP que la interfaz "ve" en la red. Extraer paquetes expresamente para mi aplicación requiere que filtre los datos usando las direcciones y puertos en los encabezados IP y TCP/UDP. Obviamente, eso probablemente sea más sobrecargado de lo que a usted le interesa. Solo lo menciono para decir esto: nunca he usado un socket en bruto sin ponerlo en modo promiscuo. Por lo tanto, no estoy seguro de si puede vincularlo a INADDR_ANY y simplemente usarlo como un socket normal desde ese punto en adelante o no. Me parece que puedes; Nunca lo intenté.
EDIT: Lea esto article para conocer las limitaciones con respecto a los sockets sin procesar en Windows. Este obstáculo más grande que enfrenté en mi proyecto fue que uno tiene que ser miembro del grupo Administradores para abrir un socket sin formato en Windows 2000 y posterior.
Gracias, esto es lo que estaba buscando. Lástima que aún no sea compatible con el módulo de socket de Python, aunque especifiqué libc en esta pregunta. :) – Readonly