Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Расшифровка коротких ссылок (http://forum.oszone.net/showthread.php?t=346419)

Uragan66 13-09-2020 15:14 2933876

Расшифровка коротких ссылок
 
Всем доброго времени суток!
Может кто подскажет, есть ли возможность посредством Powershell расшифровать короткие ссылки ?
Например, такие:
Код:

http://tinyurl.com/yytmg75x/239.195.57.14:1234
В браузере то это без проблем, но нужно расшифровать несколько десятков ссылок.
Можно это сделать через curl.exe (прописана в системной Path)
Код:

Get-Content J:\Download\123.m3u | ForEach {
(curl.exe -sL --head $_ | Select-String -Pattern 'Location: ([^"]+)' -AllMatches).Matches|
ForEach-Object {"$($_.Groups[1].Value)"}
}

Но так получаем только ссылки, которые есть в заголовке. На других ошибка.

С помощью чистого Powershell не получится решить такую задачу ?

greg zakharov 13-09-2020 16:00 2933883

Uragan66, в curl предусмотрена возможность извлечения так называемого эффективного URL (конечной точки запроса). Выглядит это примерно так:
Код:

curl -w "%{url_effective}" -o nul -sIL https://goo.gl/q76cgB
Что касается PowerShell, в разных версиях модель запросов может различаться. В седьмой версии, например, получить URL из пожатой ссылки можно следующим образом:
Код:

"$((Invoke-WebRequest https://goo.gl/q76cgB).BaseResponse.RequestMessage.RequestUri)"
nmap, к слову, также способен "извлечь" эффективный URL из пожатой ссылки.
Цитата:

Цитата Uragan66
Но так получаем только ссылки, которые есть в заголовке. На других ошибка.

Покажите сам текстовик.

Foreigner 13-09-2020 17:46 2933891

Антивирус взбунтовался против любых коротких ссылок )))

7.0.3
Код:

> $a = Invoke-WebRequest https://goo-gl.ru/6zTJ
ParserError:
Line |
  1 |  $a = Invoke-WebRequest https://goo-gl.ru/6zTJ
    |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | This script contains malicious content and has been blocked by your antivirus software.

5.1.19041.1
Код:

> $a = Invoke-WebRequest https://goo-gl.ru/6zTJ
At line:1 char:1
+ $a = Invoke-WebRequest https://goo-gl.ru/6zTJ
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This script contains malicious content and has been blocked by your antivirus software.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ScriptContainedMaliciousContent


greg zakharov 13-09-2020 18:08 2933892

Цитата:

Цитата Foreigner
Антивирус взбунтовался против любых коротких ссылок

Скриншоты? АВ обычно не бунтуют против "коротышек", они болезненно воспринимают лишь конечные точки таких ссылок, если на таковых была замечена подозрительная активность или сам сервис сжатия ссылок представляет собой нечто сортирное. Так что можно обезопасить себя, отправляя ссылки на сканирование в VirusTotal или тем же nmap (есть соответствующие сценарии) прочекать хосты.

Uragan66 13-09-2020 18:35 2933897

Цитата:

Цитата greg zakharov
Покажите сам текстовик »

ссылки могут быть разные, это тв потоки с различных сервисов.
Пример:
Код:

https://rebrand.ly/deo_/OLEG/2
http://rebrand.ly/deooleg/352
http://tinyurl.com/y3ks3hy8
http://zigfreed.ru/Sv2/741.m3u8
http://zigfreed.ru/Sv2/4.m3u8
http://zigfreed.ru/Sv2/18.m3u8

На двух первых ссылках мой код "спотыкается"
Ваш код с curl их тоже не расшифровывает.
А код для седьмой версии PowerShell срабатывает отлично со всеми ссылками. За что Вам огромное спасибо. Этот код работает на 6-й и 7-й версиях. На 5.1 срабатывает, ошибок нет, но вывод пустой.
Для 5.1 получится подобная модель запроса ?

Цитата:

Цитата Foreigner
Антивирус взбунтовался против любых коротких ссылок »

у меня нормально по этому поводу...
Но чисто Invoke-WebRequest для моей задачи не подходит. По некоторым ссылкам он просто возвращает развёрнутый плейлист, а не одну ссылку.

Foreigner 13-09-2020 18:45 2933900

Вложений: 1
Цитата:

Цитата greg zakharov
Скриншоты? »


greg zakharov 13-09-2020 18:53 2933901

Foreigner, Windows Defender? А вы не пробовали задавать запрос так:
Код:

Invoke-WebRequest -Uri https://goo-gl.ru/6zTJ
?

Цитата:

Цитата Uragan66
Для 5.1 получится подобная модель запроса ?

Да. По крайней мере насколько помню, Invoke-WebRequest в 5.1 также работал.

Цитата:

Цитата Uragan66
Ваш код с curl их тоже не расшифровывает.

Код с curl ничего не расшифровывает. Это называется получение эффективного адреса. Виндовый curl сильно кастрирован по части функциональности.

Fors1k 13-09-2020 18:54 2933902

Цитата:

Цитата Uragan66
Для 5.1 получится подобная модель запроса ? »

Код:

"$((iwr tinyurl.com/anf54v).BaseResponse.ResponseUri)"

Uragan66 13-09-2020 19:00 2933903

Fors1k, работает отлично. Спасибо большое!

Uragan66 13-09-2020 20:29 2933910

Оказалось не всё так просто...
К примеру, ссылка:
Код:

http://zigfreed.ru/Sv2/62.m3u8
в реальности udp поток
Код:

http://85.14.32.3:8800/udp/239.10.10.130:5000
и что в браузере, что скриптом идёт бесконечное скачивание потока...
Как такие короткие ссылки отличить от других, непонятно...

Fors1k 13-09-2020 21:00 2933917

Код:

$link = 'http://zigfreed.ru/Sv2/62.m3u8'
"$((Iwr -me h $link).BaseResponse.ResponseUri)"


Uragan66 13-09-2020 22:16 2933928

Fors1k, да, вроде нормально, проверю ещё на других ссылках...
Спасибо!

Fors1k 14-09-2020 15:31 2934013

Цитата:

Цитата Foreigner
Антивирус взбунтовался против любых коротких ссылок ))) »

Код:

function Get-TargetLink($url){
    add-MpPreference -ExclusionProcess ($p=(ps -id $Pid).path)
    $r = (Iwr $url).BaseResponse.ResponseUri
    Remove-MpPreference -ExclusionProcess $p
    return "$r"
}cls

Get-TargetLink 'tinyurl.com/anf54v'


Foreigner 14-09-2020 16:28 2934017

Fors1k, Ну я не знаю, какие-то ссылки открывает, какие-то ни в какую, наверное зависит от провайдера ссылок. Под линукс вообще без проблем, под виндой такой вот stderr, Зависит наверное от многого, от винды, от настроек, от хостинга коротких ссылок -- причем странно все, видимо у дефендера особый алгоритм, какие-то ссылки обрабатываются, потом, при повторе выскакивает ошибка, потом снова отрабатывается. Я вот попытался загнать в переменную, чтобы уже локально просмотреть все дерево методов и свойств, но как-то не сложилось. Ну и времени, если честно, вникать не было.

greg zakharov 15-09-2020 10:10 2934088

Foreigner, все же Windows Defender, угу. В десятке реализуется "общий" интерфейс, используемый приложениями и службами для перенаправления потока байтов поставщику антивирусного обеспечения (сам интерфейс реализован в amsi.dll, а подсмотреть его реализацию можно в amsi.(lib|h) из SDK пакета). Так вот, amsi "лапает" PowerShell для анализа выполняемого содержимого, при этом последнее перехватывается и отправляется в Defender до непосредственного исполнения. Это - в целом. В чём прикол? А прикол в отсутствии прикола, ибо зная "устройство" amsi можно "тушить" Defender прямо из PowerShell по необходимости, меняя первые три байта, скажем, AmsiScanBuffer на нечто вроде ксора 32-битного аккумулятора с последующим ретом или просто перехватив инициализируемую amsi сессию, - техник обхода много. Да и тема по сути внефорумная.

Uragan66 15-09-2020 10:34 2934092

Цитата:

Цитата Uragan66
проверю ещё на других ссылках... »

Всё-таки Invoke-WebRequest с параметрами -me h не работает корректно со всеми ссылками, к примеру, по ссылке
Код:

http://rebrand.ly/deo_oleg/467
в ответ получаем ошибку 404, тогда, как просто:
Код:

$link = 'http://rebrand.ly/deo_oleg/467'
"$((Invoke-WebRequest $link).BaseResponse.ResponseUri)"

отдаёт нормальную расшифрованную ссылку:
Код:

http://clients.apsny.camera/tv_gal_tv_hd_online/playlist.m3u8
Но этот код не подойдёт для укороченных ссылок, по которым идёт скачивание потока.
Код:

http://rebrand.ly/d_e_o_0_l_e_g/2
И условие здесь на ошибку не поставишь, так как идёт просто бесконечное скачивание потока, без ошибки...

Foreigner 15-09-2020 10:35 2934093

greg zakharov, Ну и бог с ним, с дефендером, да и с короткими ссылками тоже.

Fors1k 15-09-2020 11:19 2934104

:nunchaku:
Код:

$link = 'http://rebrand.ly/d_e_o_0_l_e_g/2',
        'http://rebrand.ly/deo_oleg/467'
cls
function Get-TargetLink($url){
    $ErrorActionPreference="stop"
    try{
        $webRequest = [net.WebRequest]::Create($url)
        $webRequest.Timeout = 4096
        $res = $webRequest.GetResponse().ResponseUri
    }catch{ $res = $Error[0] } ; $webRequest.Abort()

    return "$res"
}
$link|%{Get-TargetLink $_}

Цитата:

http://iptv.rubintele.com:8552/play/a001
http://clients.apsny.camera/tv_gal_tv_hd_online/playlist.m3u8

птичка0001 15-09-2020 12:55 2934111

greg zakharov, Простите за нескромный вопрос, а что у Вас случилось с "Археология Windows\UNIX, хаконавтика"? Если ничего не случилось, то можете не отвечать :) Просто раньше ссылка была доступна в Вашей подписи. Не то чтобы я уж так все читала, но некоторые посты были интересны

Foreigner 15-09-2020 15:39 2934136

К вопросу об антивирусе. Можно временно отключить блокировку антивирусом скрипта, выполнив с повышенными привилегиями:

Код:

Set-MpPreference -DisableRealtimeMonitoring $true

greg zakharov 15-09-2020 15:45 2934137

птичка0001, а случилась небольшая неприятность (на стороне Яндекс), которая, как надеюсь, близится к своему разрешению. На время решения проблемы пришлось убрать подпись. Как всё снова заработает, подпись со ссылкой снова появятся. Надеюсь, что произойдёт это скоро, так как накопилось достаточно интересного материала, которым бы хотелось поделиться. Если же что-то пойдёт не так (а такой сценарий событий также не стоит исключать), это также будет отражено в подписи. Спасибо вам за проявленный интерес! Если же у вас имеются ещё вопросы, вы можете задать их непосредственно в мессенджере.

Цитата:

Цитата Foreigner
Set-MpPreference -DisableRealtimeMonitoring $true

Это равносильно добровольному выстрелу в собственную ногу, если речь не об изолированной среде вроде песочницы.

Цитата:

Цитата Fors1k
$webRequest.Timeout = 4096

Нехилый таймаут, однако. К слову, у вас try...catch блок уж больно замороченный, да ещё ErrorActionPreference трогаете за интимные места без необходимости. Помимо прочего $webRequest.Abort() в ситуации, когда экземпляр объекта не был создан выдаст трейсбэк. Лучше всё переписать примерно так:
Код:

function Get-TargetLink {
  [CmdletBinding()]
  param(
      [Parameter(Mandatory, ValueFromPipeline)]
      [ValidateNotNullOrEmpty()]
      [Uri]$Url
  )

  process {
      try {
        $webRequest = ...
      }
      catch { Write-Verbose $_ }
      finally {
        if ($webRequest) { $webRequest.Abort() }
      }
  }
}


Fors1k 15-09-2020 17:01 2934144

Цитата:

Цитата greg zakharov
Нехилый таймаут, однако. »

Когда веришь до последнего)

Код:

$link = 'http://rebrand.ly/d_e_o_0_l_e_g/2',
        'http://zigfreed.ru/Sv2/62.m3u8',
        'http://rebrand.ly/deo_oleg/467'
cls

function Get-TargetLink {[CmdletBinding()]
    param(
        [Parameter ( Mandatory , ValueFromPipeline )]
        [ValidateNotNullOrEmpty()][Uri]$Url
    )
    try {
        $webRequest  = [net.WebRequest]::Create($url)
        $webRequest.Timeout = 2048
        [string]$webRequest.GetResponse().ResponseUri
    }catch  { Write-verbose "$url`n$_" }
    finally {if ($webRequest) { $webRequest.Abort()}}
}

$link|%{Get-TargetLink $_ -Verbose}

Цитата:

Цитата greg zakharov
Спасибо вам за проявленный интерес! »

Я бы тоже хотел проявить. Будет версия в телеге?

greg zakharov 15-09-2020 17:28 2934148

Fors1k, return можно и опустить, оставив один $res, тем не менее смысл делать это невелик. Почему? В виду определения функции как командлета (CmdletBinding) перехваченное исключение лучше выводить через Write-Verbose (если такая функция будет запущена с ключом -Verbose в хост PowerShell будет выведено сообщение об ошибке, а далее будет исполнен код в finally. Возвратом функции лучше не делать перехваченную ошибку и иже с ней, лучше вернуть нечто существенное, например, значение по умолчанию или некий объект, который при "сцеплении" с другой функцией просто прерывают дальнейшее исполнение. Подобный подход сейчас может показаться несколько замысловатым, однако, на практике, когда дело коснётся классов (если, конечно, коснётся) станут очевидны плюсы такого подхода.
Цитата:

Цитата Fors1k
Будет версия в телеге?

¯\_(ツ)_/¯

птичка0001 16-09-2020 21:22 2934234

greg zakharov, спасибо, ясно.
Цитата:

Цитата greg zakharov
Если же у вас имеются ещё вопросы, вы можете задать их непосредственно в мессенджере.

Я, как и большинство, использую telegram (если не считать корпоративную составляющую). Яндекс мессенджер никогда не использовала и не планирую. Так уж получилось, что за долгое время использования telegram я не задала ни одного вопроса (и по функционированию каналов/чатов в том числе) ни в одном канале или чате. И вряд ли что-то изменится в ближайшем будущем :) Мне как-то хватает поиска в google и SO (для помощи, так и для вопросов). Простите за оффтопик.

greg zakharov 17-09-2020 23:30 2934307

птичка0001, телеграм лично мне не импонирует скрытой телеметрией, о которой разработчики тактично умолчали. Прочие сервисы хотя бы честно оговаривают в соглашениях, что да, можем собирать данные. Скрывать, впрочем, мне нечего, но и желания бросаться в омут также никакого. Скорее всего будет выбрана альтернативная площадка.

Fors1k 18-09-2020 10:24 2934339

Цитата:

Цитата птичка0001
Я, как и большинство, использую telegram »

Солидарен. У меня, кроме telegram, ничего даже не установлено)

jkadaba 12-03-2022 20:51 2981556

Никто не в курсе t.me/hackpad как-то связан с хаконавтикой? Пробил канал вроде автор один.


Время: 12:24.

Время: 12:24.
© OSzone.net 2001-