2009-07-08 6 views
1

Попытка одноадресной рассылки пакетов в доступные сети. Всего 3 сети. Удалось получить пакеты только в одной сети. Но я не могу получить пакеты в разных сетях.Проблема При попытке одноадресной передачи пакетов в доступные сети

используя этот код ..

 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); 
      } 
     } 

Что такое проб? Благодарю.

ответ

1

Я думаю, что вы пытаетесь отправить пакеты себе?

Вы уверены, что не путаете одноадресные и многоадресные адреса?

Ok, так что вы не пытаетесь многоадресную ...

Каждый из сетевого интерфейса имеет адрес IP. То, что вы делаете здесь, отправляет пакет на вашу сетевую карту. На самом деле это не вопрос сети, потому что ваша машина, скорее всего, знает свои собственные IP-адреса и перенаправляет ее на 127.0.0.1

+0

Да, Эрик, я уверен. Я хочу, чтобы Unicast пакеты с доступными сетевыми адаптерами. Я предполагаю, что этот код делает это. Я не получаю никаких ошибок. Я могу получить весь сетевой адрес и отправить ему пакеты. Но не получать пакеты в IPaddress в разных сетевых адаптерах. Код может быть одноадресным для всех доступных сетевых адаптеров. – Anuya

0

Я не являюсь сетевым гуру, но я постараюсь сделать удар по нему , Я предполагаю, что все пакеты отправляются через интерфейс по умолчанию, который знает три адреса: собственный, loopback и gateway. Поэтому пакет из 192.168.1.111, предназначенный для 10.10.1.117, должен пройти через шлюз по умолчанию (давайте просто скажем, что это 192.168.1.1), но что, если 192.168.1.1 не знает маршрут до 10.10.0.0, то хост назначения недостижимое право? Я не знаю, это моя догадка.

Хотя, может быть, я ошибаюсь. Возможно, он не использует устройство по умолчанию и вместо этого использует все доступные интерфейсы вместе с стеком TCP/IP. В любом случае, мне любопытно посмотреть, что вы нашли. Пожалуйста, держите нас в курсе.

Кроме того, обратите внимание, что адреса могут быть полезны. Трассировка - ваш друг.

1

Поскольку у вас есть несколько интерфейсов, вы многосегмент. Для каждого интерфейса у вас будет IPaddress. Таким образом, с тремя интерфейсами у вас будет три локальных IP-адреса. Когда вы используете UdpClient, вам нужно указать, какой интерфейс отправлять, используя его IP.

позволяет предположить, вы следующие три локальные IP-адресов

10.1.0.1
10.2.0.1
10.4.0.1
с маской 255.255.0.0

и вы хотите для отправки UDP-пакета до 10.2.5.5 вам необходимо отправить его 10.2.0.1, поэтому используйте следующий код

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); 

и послать UDP пакет 10.1.90.5 вам нужно отправить его 10.1.0.1, так что используйте следующий код

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); 

Разница между ними являются localEndPoint и targetEndPoint.