Automatyczna zmiana serwerów DNS we wszystkich połączeniach

Pozostałe zagadnienia (sprzętowe i programowe), które nie pasują do powyższych kategorii np. optymalizacja łącza, liczniki danych, bezpieczeństwo w sieci, informacje podstawowe.

Moderator: Moderatorzy

ODPOWIEDZ
tosiek
Specjalista bezprzewodowy-junior
Posty: 292
Rejestracja: 2012-03-24, 14:00
Lokalizacja: inąd

Automatyczna zmiana serwerów DNS we wszystkich połączeniach

Post autor: tosiek »

Pytanie, jak zmienić w komórkowym połączeniu szerokopasmowym adresy serwerów DNS na stałe, tak żeby po rozłączeniu i połączeniu się nie zmieniały?

Po zmianie we właściwościach IPv4 adresy DNS zostają zastąpione po rozłączeniu i ponownym połączeniu. Wina Windowsa 7?


Napisałem sobie skrypt, który zmienia adresy serwerów DNS we wszystkich połączeniach w systemie Windows 7 ale nie ma nawet opcji żeby go wykonać np. automatycznie po połączeniu. (wymaga uprawnień administratora)

Kod: Zaznacz cały

@ECHO OFF

SET DNS_1=208.67.222.222
SET DNS_2=208.67.220.220

::
::To mozna zmienic jezeli korzystamy z innego jezyka niz polski
::
SET szukaj_nazwy=Nazwa


::
:: Get ADMIN Privs
::http://fixitwizkid.com/threads/start-batch-file-as-administrator.6157/#post-42363
::
:-------------------------------------
mkdir "%windir%\BatchGotAdmin"
if '%errorlevel%' == '0' (
  rmdir "%windir%\BatchGotAdmin" & goto gotAdmin
) else ( goto UACPrompt )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    echo UAC.ShellExecute %0, "%1", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
    pushd "%CD%"
    CD /D "%~dp0"
:-------------------------------------
::
:: End Get ADMIN Privs
::
:: Place extra code here


FOR /F "skip=3 tokens=3,* delims= " %%i IN ('netsh interface show interface') DO (
	echo ##################%%j##################
	netsh interface ip set dnsservers name="%%j" source=static address=none register=primary validate=no
	netsh interface ip set dnsservers name="%%j" source=static address=%DNS_1% register=primary validate=no
	netsh interface ip add dnsservers name="%%j" address=%DNS_2% index=2 validate=no
)


FOR /F "tokens=1,* delims=: " %%i IN ('netsh mbn show interfaces ^| findstr /R /C:"^[ ]*%szukaj_nazwy%[ ]*:.*"') DO (
	echo ##################%%j##################
	netsh interface ip set dnsservers name="%%j" source=static address=none register=primary validate=no
	netsh interface ip set dnsservers name="%%j" source=static address=%DNS_1% register=primary validate=no
	netsh interface ip add dnsservers name="%%j" address=%DNS_2% index=2 validate=no
)
	
pause
brak podpisu, tak jakby
moher
Specjalista bezprzewodowy-senior
Posty: 379
Rejestracja: 2011-02-02, 15:43
Lokalizacja: Szczecin

Re: Automatyczna zmiana serwerów DNS we wszystkich połączeniach

Post autor: moher »

Nie weryfikowałem, ale wygląda na sensowną metodę obejścia Twojego problemu:

http://superuser.com/questions/262799/h ... connection
tosiek
Specjalista bezprzewodowy-junior
Posty: 292
Rejestracja: 2012-03-24, 14:00
Lokalizacja: inąd

Re: Automatyczna zmiana serwerów DNS we wszystkich połączeniach

Post autor: tosiek »

Działa :)

Po pierwsze należy wywalić

Kod: Zaznacz cały

pause
na końcu bo zadanie będzie wisieć.
(Na wszelki wypadek można wybrać w naszym zadaniu Właściwości > Ustawienia > "Jeśli zadanie jest już uruchomione, zastosuj następującą regułę:
": Zatrzymaj istniejące wystąpienie
)

Dodatkowo: Właściwości > Ustawienia > Uruchom z najwyższymi uprawnieniami

Źródło przy wyzwalaczu wybieramy z listy.

Właściwości > Warunki > Zasilanie - odznaczamy żeby na baterii też się wykonało i wybieramy na dole właściwe połączenie.

Uproszczona wersja skryptu dla Windowsa 7 z polskim językiem (zmienia we wszystkich połączeniach szerokopasmowych). Zapisujemy poniższy skrypt z rozszerzeniem .bat:

Kod: Zaznacz cały

@ECHO OFF

SET DNS_1=208.67.222.222
SET DNS_2=208.67.220.220

::
::To mozna zmienic jezeli korzystamy z innego jezyka niz polski
::
SET szukaj_nazwy=Nazwa


FOR /F "tokens=1,* delims=: " %%i IN ('netsh mbn show interfaces ^| findstr /R /C:"^[ ]*%szukaj_nazwy%[ ]*:.*"') DO (
	echo ##################%%j##################
	netsh interface ip set dnsservers name="%%j" source=static address=none register=primary validate=no
	netsh interface ip set dnsservers name="%%j" source=static address=%DNS_1% register=primary validate=no
	netsh interface ip add dnsservers name="%%j" address=%DNS_2% index=2 validate=no
)
Wskazówka, jeśli chcecie zmienić tylko w jednym połączeniu to zmieńcie nazwę tego połączenia na wersję bez polskich znaków! (bo przy zapisie skryptu musielibyście wybrać odpowiednie kodowanie znaków żeby działało)

Jeśli macie inny język to wykonajcie komendę:

Kod: Zaznacz cały

netsh mbn show interfaces
i zmieńcie odpowiednio pogrubiony fragment:
SET szukaj_nazwy=Nazwa
brak podpisu, tak jakby
ODPOWIEDZ