Domanda

Il tentativo di pacchetti unicast alle reti disponibili. Ci sono totalmente 3 reti. Siamo riusciti a ottenere i pacchetti in una sola network.But io non sono in grado di ricevere i pacchetti in reti diverse.

utilizzando questo codice ..

        foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces())
        {
            foreach (var ua in i.GetIPProperties().UnicastAddresses)
            {
                System.Windows.Forms.MessageBox.Show(ua.Address.ToString());
                IPAddress Tip = IPAddress.Parse(ua.Address.ToString());
                IPEndPoint targetEndPoint = new IPEndPoint(Tip, iTargetPort);
                MyUdpClient sendUdpClient = new MyUdpClient();
                int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);
            }
        }

Qual è il prob? Grazie.

È stato utile?

Soluzione

Penso che si sta cercando di inviare pacchetti a te stesso?

Sei sicuro che non stai confondendo gli indirizzi unicast e multicast?

Ok, quindi tu non stai cercando di multicast ...

Ogni della propria interfaccia di rete ha un indirizzo IP. Quello che stai facendo qui è l'invio di un pacchetto per la scheda di rete. In realtà non è una questione di rete perché la macchina conosce molto probabilmente i propri indirizzi IP e reindirizzare a 127.0.0.1

Altri suggerimenti

Dal momento che si dispone di più di un'interfaccia che si sta multihomed. Per ogni interfaccia si avrà un IPaddress. Quindi, con tre interfacce si avrà tre locali di IP. Quando si utilizza la classe UdpClient è necessario specificare quale interfaccia per l'invio di usando il suo IP.

lascia supporre di avere le seguenti tre locali di IP

  

10.1.0.1
  10.2.0.1
  10.4.0.1
  con una maschera di rete 255.255.0.0

e si desidera inviare un pacchetto UDP per 10.2.5.5 è necessario inviare fuori 10.2.0.1 in modo da utilizzare il seguente codice

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.2.0.1"), 0);
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.2.5.5"), iTargetPort);
UdpClient sendUdpClient = new UdpClient(localEndPoint);
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);

e inviare un pacchetto UDP per 10.1.90.5 è necessario inviare fuori 10.1.0.1 in modo da utilizzare il seguente codice

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("10.1.0.1"), 0);
IPEndPoint targetEndPoint = new IPEndPoint(IPAddress.Parse("10.1.90.5"), iTargetPort);
UdpClient sendUdpClient = new UdpClient(localEndPoint);
int numBytesSent = sendUdpClient.Send(CombineHeaderBody, CombineHeaderBody.Length, targetEndPoint);

La differenza tra i due sono la LocalEndPoint e la targetEndPoint.

Io non sono molto di un guru della rete, ma cercherò di prendere una pugnalata a esso. Suppongo che tutti i pacchetti vengono inviati attraverso l'interfaccia di default che sa di tre indirizzi: il proprio, loopback, e il gateway. Quindi un pacchetto da 192.168.1.111 destinato a 10.10.1.117 avrebbe bisogno di passare attraverso il gateway predefinito (diciamo solo che questo è 192.168.1.1), ma cosa succede se 192.168.1.1 non conosce la strada per 10.10.0.0, poi host di destinazione giusto irraggiungibile? Non lo so, questa è la mia ipotesi.

Anche se, forse mi sbaglio. Forse non utilizza un dispositivo predefinito e utilizza invece tutte le interfacce disponibili con lo stack TCP / IP. Comunque, io sono curioso di vedere ciò che si trova però. Si prega di tenerci aggiornati.

Inoltre, annotando gli indirizzi potrebbe essere utile. trace route è tuo amico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top