Onder Windows (net als onder andere besturingssystemen) is het mogelijk om een socket te binden aan alle beschikbare interfaces (in plaats van een specifieke interface); de applicatie kan dan data van willekeurige interfaces ontvangen. Het is bovendien mogelijk om broadcasts packets te sturen; dat kan door als adres van een packet het broadcast-adres van een bepaald subnet op te geven (bijvoorbeeld 192.168.255.255), maar ook met het universele broadcastadres 255.255.255.255. In dat geval verstuurt Windows het pakketje over alle beschikbare interfaces.
De combinatie van die twee levert echter problemen op: bij het versturen van het broadcast pakketje moet Windows het IP adres van de afzender verzinnen (het moet tenslotte ergens vandaan komen). Het lijkt logisch om voor elke interface één van de adressen van de interface te kiezen. Maar dat doet Windows niet! Windows kiest een of ander 'default' of 'primair' IP adres, bouwt daarmee het pakketje op, en stuurt die over alle beschikbare interfaces. Dit is irritant, omdat het pakketje over tunnels en VPN-verbindingen en dergelijke meestal ergens in het proces weggesmeten wordt door routers die het als een gespooft pakketje zien (terecht ook, in principe). Overigens doen alle besturingssystemen die ik ken dat op deze manier; het is dus niet echt een Windows-specifiek probleem.
Mijn vraag is echter wel Windows-specifiek: hoe beslist Windows wat het 'default' IP-adres is en (hoe) kan ik dat wijzigen? Voor de duidelijkheid: mijn vraag gaat dus specifiek om de situatie waarin een pakketje wordt verstuurd naar 255.255.255.255 vanaf een socket die gebonden is op 0.0.0.0, in een bestaande applicatie die ik niet kan wijzigen (als ik het zelf zou programmeren, zou ik ofwel aan een specifiek adres kunnen binden ofwel naar een specifiek broadcastadres kunnen sturen).
De combinatie van die twee levert echter problemen op: bij het versturen van het broadcast pakketje moet Windows het IP adres van de afzender verzinnen (het moet tenslotte ergens vandaan komen). Het lijkt logisch om voor elke interface één van de adressen van de interface te kiezen. Maar dat doet Windows niet! Windows kiest een of ander 'default' of 'primair' IP adres, bouwt daarmee het pakketje op, en stuurt die over alle beschikbare interfaces. Dit is irritant, omdat het pakketje over tunnels en VPN-verbindingen en dergelijke meestal ergens in het proces weggesmeten wordt door routers die het als een gespooft pakketje zien (terecht ook, in principe). Overigens doen alle besturingssystemen die ik ken dat op deze manier; het is dus niet echt een Windows-specifiek probleem.
Mijn vraag is echter wel Windows-specifiek: hoe beslist Windows wat het 'default' IP-adres is en (hoe) kan ik dat wijzigen? Voor de duidelijkheid: mijn vraag gaat dus specifiek om de situatie waarin een pakketje wordt verstuurd naar 255.255.255.255 vanaf een socket die gebonden is op 0.0.0.0, in een bestaande applicatie die ik niet kan wijzigen (als ik het zelf zou programmeren, zou ik ofwel aan een specifiek adres kunnen binden ofwel naar een specifiek broadcastadres kunnen sturen).