Domyślny interfejs sieciowy przy wykonywaniu połączenia IP

0

Witam,
Do komunikacji z pewnym urządzeniem protokołem UDP potrzebuję mu posłać lokalny adres IP komputera. Adres lokalny trzeba zaszyć w pakiecie ramki startowej, która odbierana jest po UDP i wtedy urządzenie odpowiada na podany w ten sposób adres. Jeśli interfejs sieciowy w komputerze jest jeden to problemu nie ma natomiast jeśli interfejsów będzie więcej (a tak często jest na dużych serwerach na których działa aplikacja przez zdalny pulpit) to zaczynają się schody a zwłaszcza jeśli jest jeszcze VPN.
Funkcja GetIpAddresses dostępna w JclSysInfo zwróci adresy IP kilku interfejsów i nie wiem który zaszyć w ramce. Próbowanie po kolei na chybił trafił odpada bo raz wysłana poprawna ramka zawłaszcza urządzenie na kilka minut i jeśli adres był nieprawidłowy to przez kilka minut nie będzie z nim komunikacji. Jedyne co znam to adres IP:port urządzenia na którym nasłuchuje.
W pierwszej chwili myślałem że wystarczy zrobić iloczyn adresu i maski co da nam adres sieci, jeśli będą takie same dla urządzenia i localhosta to będzie to właściwy interfejs. Niestety są sytuacje, że w tablicy routingu (route print) np. przy tworzeniu openvpn dodawane są jeszcze dodatkowe wpisy i nagle się okazuje, że pojawiają się dodatkowe adresy które nie spełniają tego warunku adres*maska a mimo to są osiągalne w sieci i taki przypadek również musiałbym przewidzieć.
Pytanie w jaki sposób mógłbym się do tego dostać, prasowanie tekstu zwróconego przez route print odpada. Zapewne są jakieś funkcje w Delphi, które za to odpowiadają (pewnie coś w INDY). Czy mak ktoś jakieś w tym doświadczenie i sugestie?

0

Ja to nie rozumiem o co chodzi. Jest sobie komputer i ma kilka interfejsów sieciowych. każdy ma swój lokalny adres IP. Nagle przychodzi koleś i wkłada sobie losowo kolejne sieciowe karty i restartuje maszynę i wtem pojawiają się nowe interfejsy sieciowe z randomowym adresem IP.

Masz komputery lokalne, do których ktoś się łączy przez zdalny pulpit, ale co do tego ma VPN? czy zdalny komputer łączy się przez VPN gdzieś, czy ty się łączysz przez VPN i potem włazisz na zdalny pulpit. VPN to tak samo jakbyś był w lokalnej sieci więc nie ma z tym problemu.

Po porstu musisz zdobyć adres IP maszyny docelowej i się na nią łączysz. Tak samo jak w grze podajesz adres IP servera i koniec. Nie wiadomo o co chodzi, narysuj diagram przepływu informacji bo z tego opisu wynika chaos.

0

To może inaczej, po wpisaniu u mnie na kompie

C:\Users\admin>route print

IPv4 Route Table

===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0     192.168.88.1   192.168.88.214     25
          0.0.0.0          0.0.0.0    192.168.200.1   192.168.200.86     60
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
     192.168.88.0    255.255.255.0         On-link    192.168.88.214    281
   192.168.88.214  255.255.255.255         On-link    192.168.88.214    281
   192.168.88.255  255.255.255.255         On-link    192.168.88.214    281
    192.168.200.0    255.255.255.0         On-link    192.168.200.86    316
   192.168.200.86  255.255.255.255         On-link    192.168.200.86    316
  192.168.200.255  255.255.255.255         On-link    192.168.200.86    316
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link    192.168.88.214    281
        224.0.0.0        240.0.0.0         On-link    192.168.200.86    316
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link    192.168.88.214    281
  255.255.255.255  255.255.255.255         On-link    192.168.200.86    316
===========================================================================

W kolumnie Interface pecta są dwa interfejsy i dwa adresy :
eth 192.168.88.214
wifi 192.168.200.86

Teraz jeśli urządzenie z którym chcę się komunikować ma adres np 192.168.88.105 to z interfejsu ETH o adres 192.168.88.214 poleci ramka UDP inicjująca to urządzenia z zaszytym adresem 192.168.88.214.
Jeśli urządzenie ma adres 192.168.200.85 to komunikacja odbędzie się na interfejsie wifi i do urządzenia poleci ramka UDP z zaszytym adresem 192.168.200.86.

Kiedy urządzenie odbierze ramkę UDP inicjującą poprawnie, to utworzy nowy request UDP na adres zaszyty w ramce który otrzymany został przed chwilą.
Cały problem polega na wyczajeniu z którego interfejsu wychodzi request na dany IP bym wiedział jaki adres mam zaszyć w ramce inicjującej bo urządzenie na ten adres będzie wysyłać odpowiedzi.

W podanym przykładzie sprawa jest dość prosta bo urządzenie jest w tej samej podsieci i więc dla
IP urządzenia 192.168.88.105 -> ramka inicjująca musi zawierać IP 192.168.88.214 będzie działać bo urządzenie ma adres w tej samej sieci co PC więc będą sie widzieć natomiast gdy do ramki inicjującej wrzucić adres WFII 192.168.200.86 to nie będzie komunikacji.

Analogicznie gdyby było na odwrót:
IP urządzenia 192.168.200.86 -> ramka inicjująca musi zawierać IP 192.168.200.85 - będzie działać
IP urządzenia 192.168.200.86 -> ramka inicjująca gdy będzie zawierać IP 192.168.88.214 - nie będzie działać

Chodzi o wyczajenie z którego interfejsu wyjdzie żądanie do zadanego IP.

Request do 192.168.88.105 wyjdzie z eth0 z adresu 192.168.88.214, request do 192.168.200.86 wyjdzie z Wifi z adresu 192.168.200.85.

Chodzi teraz o jak kodem w delphi sprawdzić z jakiego adresu/interejsu wyjdzie request po zadaniu mu jakiegoś IP.

W trudniejszym przypadku będzie tak, że np po uruchomieniu Openvpn pojawią się dodatkowe wpisy w tablicy routingu, takie że ruch do adresu np 10.0.0.1 ma iść przez interfejs VPN 10.0.100.6 (maska 255.255.255.0) co jak widać nie spełnia warunku adres*maska= ten sam adres sieci.

Przykład takiej konfiguracji:

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0     192.168.88.1    192.168.88.31     25
          0.0.0.0          0.0.0.0     10.100.100.5     10.100.100.6   5025
       10.100.0.0    255.255.255.0     10.100.100.5     10.100.100.6    281
     10.100.100.0    255.255.255.0         On-link      10.100.100.6    281
     10.100.100.6  255.255.255.255         On-link      10.100.100.6    281
   10.100.100.255  255.255.255.255         On-link      10.100.100.6    281

1 użytkowników online, w tym zalogowanych: 0, gości: 1