Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2015, 22:32   #1
EAGauss
Новичок
Джуниор
 
Регистрация: 29.08.2015
Сообщений: 1
По умолчанию Powershell: Получить IPv4 адрес и использовать его в качестве аргумента для команды netsh

Приветствую!

Начну издалека. Недавно захотел настроить себе подключение по IPv6 через tunnelbroker, но вот незадача - мой интернет провайдер выдаёт белые динамические IPv4 адреса, поэтому нужно автоматизировать процесс обновления адреса туннеля. Сам tunnelbroker предлагает решение, но оно работает только на его стороне, а на моей нет, поэтому каждый раз при смене IPv4 адреса приходится удалять старый туннель и создавать новый.
Усердно погуглив, нашёл решение, но у меня возникли проблемы с получением IPv4 адреса и передаче его в качестве аргумента для функции netsh. Связался с автором кода, но тот пару раз ответил и затих, а проблема так и не осталась решённой.
Вот, собственно, ссылка на первоисточник:
http://josherickson.org/132/hurrican...tartup-script/

Код:
function fastpingtest {
    $ping = New-Object System.Net.NetworkInformation.Ping;
    $ping.Send("8.8.8.8", 1000).status -eq "success";
}
$endtime = [datetime]::Now.AddMinutes(1);
$mapipv6 = $false; 
while([datetime]::Now -lt $endtime) {
    if(fastpingtest) { $mapipv6 = $true; break; }
}

if($mapipv6) {
    $wc = New-Object net.webclient;
    $url= "https://ipv4.tunnelbroker.net/ipv4_end.php?ip=AUTO&pass={1}&apikey={0}&tid={2}";

    $values = "USERID", "PASSWORDMD5HASH", TUNNELID;
    $wc.DownloadString(($url -f $values));
    
    #get connected interface
    $interface = netsh interface ipv4 show interface | findstr /c:" connected" | ?{!$_.contains("Loopback");} | %{[regex]::Split($_, "( )+") | ?{$_.trim().length -gt 0} | %{$_.trim()}; }
    $interface_ip = (netsh interface ipv4 show address $interface[0] | findstr /c:"IP Address" | select -First 1).split(":")[1].trim()
    netsh interface teredo set state disabled
    netsh interface ipv6 add v6v4tunnel IP6Tunnel $interface_ip HEIPv4ENDPOINT
    netsh interface ipv6 add address IP6Tunnel YOURIPv6ADDRESS
    netsh interface ipv6 add route ::/0 IP6Tunnel HEIPv6ADDRESS
Проблемы начинаются после комментария #get connected interface
Автор посоветовал поменять !$_.contains("Loopback"); на $_.contains("Satel"); (потому что моё подключение к интернету так называется), также я посчитал логичным поменять findstr /c:"IP Address" на findstr /c:"IP-Адрес", так как оригинальный код писался под англоязычную систему, а у меня - русский язык.
Но всё равно проблема та же - в переменную $interface_ip записывается некорректный адрес (или не записывается вообще), соответственно команде netsh передаются неправильные параметры, и ничего не работает.

Прогуглив тему извлечения IPv4 адреса, нашёл другой вариант.
Код:
    #get connected interface
    $ipAddress = Test-Connection -ComputerName EAGauss -Count 1  | Select -ExpandProperty IPV4Address
    $interface_ip = $ipAddress.IPAddressToString
Где EAGauss - имя хоста (моего компьютера), я было обрадовался, потому что выполняя эти пару команд, всё работает и выводится мой IPv4 адрес, но когда я заменяю старый кусок кода, на этот, всё равно получаю ошибку:

-ERROR: Invalid IPv4 address supplied

Что значит что функции netsh передан неверный параметр.

Прошу помощи.
С Уважением,
EAGauss
EAGauss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить MAC адрес устройства, зная его IP Шульц Работа с сетью в Delphi 23 27.07.2013 20:21
Как в Си использовать двумерный массив в качестве аргумента функции? Hornet_nsk Помощь студентам 7 05.02.2012 09:46
Ввод десятичного числа в качестве аргумента для номера строки и столбца курсора Cheater13 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 24.05.2011 18:34
Передача object в качестве аргумента moknomo Microsoft Office Excel 3 14.12.2010 09:35
можно ли в качестве аргумента функции использовать имя текстового файла Arassir Общие вопросы Delphi 2 31.05.2010 23:12