identyfikator domyślnego interfejsu...

0

Spędziłem właśnie upojnie kilka godzin poszukując prostego sposobu na określenie identyfikatora domyślnego (a raczej aktualnie wybranego) interfejsu sieciowego.

Innymi słowy - jak wiadomo ustawienia TCP/IP winXP przechowuje w rejestrze. Są one zapisane w kluczu
HKEY_Local_Machine\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces{id_interfejsu}

i tu pojawia się problem. tych interfejsow jest wiele. w jaki sposbo najprosciej w delphi 2005 pe mozna zidentyfikowac, jaki jest ID interfejsu aktualnie aktywnego polączenia sieciowego, tak aby potem móc spokojnie manipulować ustawieniami TCP/IP.

zmieniać te ustawienia już sobie potrafię, natomiast identyfikator interfejsu znalazlem "ręcznie" po prostu przeglądając rejestr w regedit. niestety muszę to zautomatyzować tak, aby aplikacja była uniwersalna i potrafila na kazdym kompie sama odnalezc odpowiedni klucz rejestru.

any ideas? ;)

pozdrawiam
adam

0

Niewiem czy to właściwa podpowiedz ale może okazać się przydatna
COM + (INetConnectionManager i IEnumNetConnection)

0

Przede wszystkim - dzięki za podpowiedź.

Spojrzenie w dobrą stronę, aczkolwiek idąc tym tropem znalazłem znacznie prostsze rozwiązanie. Poniżej informacja - mam nadzieję, że komuś się przyda :)

Zakładając, że umiemy manipulować rejestrem za pomocą Delphi (co nie jest szczególnie skomplikowane) należy odnaleźć następujący klucz:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage

Mamy tam takie pola jak:
"Bind"
"Export"
"Route"

Wystarczy wczytać wartość z pola "Bind" (lub "Export"). Dla przykładu u mnie wartość pola "Bind" wygląda tak:

\Device{98475CD0-6E2F-4DE2-9E06-41000D37F182}
\Device\NdisWanIp

Pierwsza linia wskazuje na "główny" interfejs sieciowy. Zatem wycinając ze stringa wartość w nawiasach klamrowych (włącznie z nawiasami) otrzymujemy identyfikator głównego interfejsu sieciowego.

Następnie łączymy klucz

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces</span>

z tym "wyciętym" i otrzymujemy śliczny bezpośredni dostęp do ustawien TcpIp aktualnego interfejsu sieciowego (innymi słowy głównej sieciówki) w postaci pełnej nazwy klucza rejestru z tymi ustawieniami.

Zaleta jest ta, że w systemach z wieloma kartami sieciowymi zawsze powinno wskazać na "główny" interfejs, a więc ten łączący z internetem a nie siecią lokalną.

Tak przynajmniej wynika z teorii - u mnie na razie działa, ale jeszcze potestuję :)

Pozdrawiam.

0

Pytanie: po czym w ogóle wnioskujesz, że w systemie istnieje coś takiego, jak 'domyślny interfejs sieciowy'? Czym od miałby się charakteryzować? Nie istnieje coś takiego - z punktu widzenia przesyłania pakietów, rządzą tu reguły routingu, a więc po prostu kwestia dostępnych zakresów adresów IP i ewentualnie bram do połączenia dalej, metryk itp. Aby obalić Twoją powyższą teorię odnośnie rejestru, pokażę taki przykład:

"Bind" ma u mnie taką wartość:

\Device\{19FE4065-7EC6-4B83-9365-BC732B0AC275}
\Device\{E1D7B69C-A22D-4E59-BBA5-8C4DC08DA194}
\Device\{DCD5AEF8-09A4-48AC-AA82-B77A5EC81C39}
\Device\{59EB9932-FF8C-44BF-AA40-7DE5E6101804}
\Device\{D0002D71-707D-4FD1-ABC4-8D30CCC0240A}
\Device\{DD8488E1-1896-4F06-B44B-DD5BFD6E134E}
\Device\{68120EC6-587C-4D2D-8166-1A877ADC41D6}
\Device\NdisWanIp

Siedzę właśnie przy laptopie, który ma dwie sieciówki Ethernet (RJ45), radiówkę WiFi, 'sieciówkę' BlueTooth, 'sieciówkę' Firewire. Aby było ciekawiej, interfejs od internetu jest tu wypisany jako drugi od końca (jedynie przed BlueTooth).

Jaka jest różnica między interfejsem do internetu a LAN? Nawet do sieci LAN (częściej jako intranet) stosuje się czasem bramy i serwery DNS. A przecież reszta konfiguracji kart sieciowych jest identyczna.

0

Szczawik...

Zacznę może od tego, że określenie "domyślny" w przypadku interfejsu sieciowego rzeczywiście jest nieco niefortunne. Spróbuję trochę sprecyzować co miałem na myśli.

Kiedy w WinXP masz wiele urządzeń sieciowych (albo nawet jedno ale...) i skonfigurowane wiele połączeń sieciowych - zwykle jedno z nich oznaczone jest jako "domyślne. Zazwyczaj jest to albo jedyne połączenie do netu, lub też - gdy komputer służy na przykład do udostępniania netu sieci lokalnej - jest połączenie "na świat" a nie do sieci lokalnej..

Nie wiem co się dzieje, kiedy masz do XP wpięte dwa łącza internetowe, np. 2 dsl'e, które dostarczają Ci net, ale szczerze mówiąc taka sytuacja mnie nie interesuje.

Natomiast w przypadku opisanym wcześniej - to właśnie to połączenie powinno pojawić się na pierwszej pozycji we wspomnianych kluczach rejestru (nie mówimy tu o polu "Route"!).

I teraz jeszcze jedno - oczywiście, że możesz sobie manipulować routingiem po swojemu. Różne "cuda" można robić, ale cały mój "wywód" dotyczy sytuacji "standardowej konfiguracji".

Nie twierdzę, że tak jest zawsze, natomiast zazwyczaj. I to większości zastosowań powinno wystarczyć.
Natomiast oczywiście w przypadku bardziej zaawansowanych potrzeb - można przecież "przeczesać" wszystkie interfejsy sieciowe i ich ustawienia (szczególnie, że korzystając z innego klucza - nie pomnę w tej chwili, którego, a nie chce mi się już szukać - można je powiązać z "przyjazną" nazwą, tj. tą widoczną w folderze "połączenia sieciowe" windy).

A cała ta "analiza" zaczęła się stąd (tak więc nie jest to moja teoria):
http://aspn.activestate.com/ASPN/Mail/Message/perl-win32-admin/214000

Pozdrawiam senno-nocnie ;)

0
adamsky napisał(a)

Kiedy w WinXP masz wiele urządzeń sieciowych (albo nawet jedno ale...) i skonfigurowane wiele połączeń sieciowych - zwykle jedno z nich oznaczone jest jako "domyślne. Zazwyczaj jest to albo jedyne połączenie do netu, lub też - gdy komputer służy na przykład do udostępniania netu sieci lokalnej - jest połączenie "na świat" a nie do sieci lokalnej..

Cóż czyni je "domyślnym"? W jaki sposób jest ono "oznaczone"? Z jakiego powodu miałoby być ono wyróżnione od innych? W Windows wszystkie interfejsy sieciowe mają równorzędny status, a to, którym pakiet zostanie przesłany zależy od algorytmu routingu, a nie jakiejś kolejności [nie licząc ewentualnych metryk - to liczę jako element routingu, bo rzadko jest statyczny] czy domyślności, a tym bardziej kierunku: na świat, do podsieci.

A tak swoją drogą, na lokalnym pececie mam dwie klasyczne sieciówki [nie Bluetooth czy nawet WiFi] (udostępnianie netu drugiemu komputerowi) i wiesz co.. Twoja teoria tym bardziej się nie potwierdza. Sieciówka od sieci lokalnej jest wypisana pierwsza. :/

0

Cóż czyni je "domyślnym"? W jaki sposób jest ono "oznaczone"? Z jakiego powodu miałoby być ono wyróżnione od innych? W Windows wszystkie interfejsy sieciowe mają równorzędny status, a to, którym pakiet zostanie przesłany zależy od algorytmu routingu, a nie jakiejś kolejności [nie licząc ewentualnych metryk - to liczę jako element routingu, bo rzadko jest statyczny] czy domyślności, a tym bardziej kierunku: na świat, do podsieci.

Nie odnoszę się do routingu oraz statusu interfejsów w ramach systemu. Odnoszę się wyłącznie do tego co można zobaczyć niejednokrotnie w oknie "połączenia sieciowe" windy.

A co do "mojej teorii" - raz jeszcze powtarzam, że ona nie jest moja (patrz link w moim porzednim poscie). Natomiast nie upieram się, że jest ona słuszna - na razie się sprawdza w przypadku mojego oraz kilku innych komputerów na których testowałem. Ale cały czas testuje i próbuję, aby znaleźć najbardziej uniwersalne i proste rozwiązanie. Nie wykluczam, że ta teoria legnie w praktyce w gruzach - dam znać jakby co :) Póki co sprawdza się...

0
adamsky napisał(a)

Nie odnoszę się do routingu oraz statusu interfejsów w ramach systemu. Odnoszę się wyłącznie do tego co można zobaczyć niejednokrotnie w oknie "połączenia sieciowe" windy.

A co takiego można tam zobaczyć? Chyba nie dostrzegam tego, co, według Ciebie, wyróżnia interfejs domyślny. To, że wiele osób może go poszukiwać, nie znaczy, że szukają tego, co trzeba.

Jednak ten temat nie jest, jak widzę, rozmową o poszukiwaniu "domyślnego" interfejsu sieciowego, a interfejsu z wyjściem na internet. Czy nie łatwiej na przykład sprawdzić dostępność jakiegoś stałego publicznego lub własnego serwera sieciowego (ping, połączenie, cokolwiek)? Bez względu na to, czy będzie wypisany pierwszy, czy nie, znajdzie właściwy.

0
Szczawik napisał(a)

Jednak ten temat nie jest, jak widzę, rozmową o poszukiwaniu "domyślnego" interfejsu sieciowego, a interfejsu z wyjściem na internet. Czy nie łatwiej na przykład sprawdzić dostępność jakiegoś stałego publicznego lub własnego serwera sieciowego (ping, połączenie, cokolwiek)? Bez względu na to, czy będzie wypisany pierwszy, czy nie, znajdzie właściwy.

jak napisałem gdzieś tam wcześniej - określenie "domyślny" rzeczywiście zostało przeze mnie użyte dość niefortunnie. Natomiast co do sprawdzenia "dostępności jakiegoś stałego publicznego lub własnego serwera"...

cóż... tak to już jest, że najprostsze rozwiązania zazwyczaj najrzadziej przychodzą do głowy - w myśl zasady "pod latarnią najciemniej". oczywiście masz rację... i to będzie zdecydowanie najlepsze rozwiązanie :)

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