All'esterno di aprire un socket separato su ciascuna interfaccia come suggerito Glomek, l'unico modo che conosco per farlo definitivamente in Windows è utilizzare un raw socket, ad esempio,
SOCKET s = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
Ogni ricevono da questa presa sarà essere un IP packet, che contiene sia l'indirizzo di origine che di destinazione. Il programma su cui lavoro richiede di mettere il socket in modalità promiscua usando l'opzione SIO_RCVALL. Ciò significa che ottengo ogni pacchetto IP che l'interfaccia "vede" sulla rete. Per estrarre i pacchetti espressamente per la mia applicazione, è necessario filtrare i dati utilizzando gli indirizzi e le porte nelle intestazioni IP e TCP/UDP. Ovviamente, questo è probabilmente più sovraccarico di quello che ti interessa. Lo dico solo per dirlo: non ho mai usato un socket raw senza metterlo in modalità promiscua. Quindi non sono sicuro se è possibile associarlo a INADDR_ANY e usarlo come socket normale da quel punto in avanti o meno. Mi sembra che tu possa; Non l'ho mai provato.
MODIFICA: Leggere questo article per le limitazioni relative ai socket non elaborati su Windows. Questo maggiore ostacolo che ho dovuto affrontare nel mio progetto era che si doveva essere membri del gruppo Administrators per aprire un socket raw su Windows 2000 e successivi.
fonte
2009-03-03 05:34:15
Grazie, questo è quello che stavo cercando. Peccato che non sia ancora supportato dal modulo del socket Python - anche se ho specificato libc in questa domanda. :) – Readonly