Войти

Показать полную графическую версию : [решено] Вывод ip вместе с заголовком


Страниц : 1 [2]

Freddy1984
12-08-2019, 21:35
Вы не можете ему просто так взять и скормить IP-адрес в обход DNS »
почему? а как же параметр --url ?
цитата из справки:
"Задаёт url. Параметр полезен для указания адресов URL в файле конфигурации. Для контроля куда файл будет записан используйте параметры -o, --output или -O, --remote-name.
Параметр можно использовать любое количество раз."

greg zakharov
12-08-2019, 21:44
Freddy1984, а вам не кажется, что URL и IP суть разные вещи? Читайте по буквам: URL - унифицированный локатор ресурса, IP - сетевой адрес узла. Вы где-нибудь видели в справке curl параметр --ip?

Vadikan
12-08-2019, 21:56
в файле in.txt имеется: »
Т.е. вы фактически хотите загонять $LINK в out.txt? Тогда так
ForEach ($LINK in Get-Content in.txt)
{$LINK >> out.txt
&".\curl.exe" --head --get $LINK >>out.txt}
Или здесь никто не понимает, чего вы хотите :)

Freddy1984
12-08-2019, 21:56
а вам не кажется, что URL и IP суть разные вещи? Читайте по буквам: URL - унифицированный локатор ресурса, IP - сетевой адрес узла. Вы где-нибудь видели в справке curl параметр --ip »
простите, я это хорошо знаю, но вы явно не знаете что в контексте работы curl, данный параметр (--url) подходит как для работы с урлами, так и с сетевыми ip адресами.
но это мы уже совсем далеко от темы ушли...
я знаю как на cmd реализовать построчное чтение из файла ip адресов с помощью curl (и там как раз без --url не обойтись) и запись заголовков с ip адресом в файл, но с PowerShell у меня большие недопонимания, от того и задал тут вопрос.

Т.е. вы фактически хотите загонять $LINK в out.txt? Тогда так »
да, как я писал уточнения ещё на второй странице - пустые пропускать.
По вашему коду всё почти правильно работает, только кроме рабочих, в файл дописывает ещё и не рабочие.

Или здесь никто не понимает, чего вы хотите :) »
я же на 2-й странице сделал довольно развёрнутое уточнение, там же всё понятно и наглядно с примерами :)

Vadikan
12-08-2019, 22:43
Модераториал
да, как я писал уточнения ещё на второй странице - пустые пропускать. »
я же на 2-й странице сделал довольно развёрнутое уточнение »
Я вам как администратор конференции скажу. В этой теме 25 постов без решения не потому что отвечающие не обладают достаточной квалификацией. А потому что ТС не может внятно изложить свою задачу и исходные условия. И даже после того как из него вытагивают их по крупицам клещами, ему в голову не приходит заносить все подробности в первый пост.

Freddy1984
12-08-2019, 22:52
все подробности в первый пост. »
намёк однозначен :)))
Ок

YuS_2
13-08-2019, 08:43
в файле in.txt имеется список ip. для примера: »
Ну, списка, положим, тут нет, а есть только один IP адрес с указанным портом...
Для тестирования необходимо было бы указать пару существующих и пару несуществующих.

в файл out.txt должно выводится:
(соответственно пустые ip адреса - пропускать) »
Т.е. не существующие IP? "Пустые" - не совсем понятно.

После запуска скрипта почему то идёт пауза в 30 сек. перед прогоном по списку. »
а поместите в список первым адресом проверенный, т.е. тот который действительно существует...

А так, учитывая всё вышенаписанное, попробуйте так:
$fin = 'in.txt'
$fout = 'out.txt'

gc $fin -enc utf8|%{
$tmp = $(curl.exe -Im 3 "$_")
if ($tmp -match 'http'){
$_,$tmp|out-file $fout -enc utf8 -app
}
}

Freddy1984
13-08-2019, 09:08
Т.е. не существующие IP? "Пустые" - не совсем понятно. »
да, те адреса, которые не отдают заголовки (или вообще не рабочие), пропускать и не записывать в out.txt
Отрабатывает прекрасно! Громадный респект Вам!!

Можно ещё тогда вопрос?
так как на обработку каждой строки уходит 3 сек. (да, можно регулировать, понимаю), то прогон достаточно увесистого списока может занять приличное время. Я тут гуглил, и наткнулся на некий асинхронный метод прогона (я так понял это многопоточный, или многопроцессный режим).
Можно попросить вас посмотреть, возможно ли асинхронный метод совместить с вашим кодом?
Пример:
$urllist = 1..97
$batchSize = 20

$results = [System.Collections.ArrayList]::new()

$i = 1
foreach($url in $urllist) {

$w = [System.Net.Webclient]::new().DownloadStringTaskAsync("http://www.example.com?q=$i")
$results.Add($w) | Out-Null

if($i % $batchSize -eq 0 -or $i -eq $urllist.Count) {
While($false -in $results.IsCompleted) {sleep -Milliseconds 300} # waiting for batch to complete
Write-Host " ........ Batch completed ......... $i" -ForegroundColor Green
foreach($r in $results) {
New-Object PSObject -Property @{url = $r.AsyncState.AbsoluteURI; jobstatus =$r.Status; success = !$r.IsFaulted}
# if you need response text use $r.Result
}
$results.Clear()
}

$i+=1

}

YuS_2
13-08-2019, 12:37
так как на обработку каждой строки уходит 3 сек. »
не так...
3 сек. - максимально допустимое время передачи. Это время ожидания ответа, другими словами. Если он придет быстрее, то и ожидания не будет.

Можно попросить вас посмотреть, возможно ли асинхронный метод совместить с вашим кодом? »
Вряд ли это будет работать с IP адресами, потребуются дополнительные преобразования. Кроме того, вроде бы, этот метод загружает всю страницу, а не только заголовки и в конечном итоге, думаю, что выигрыш во времени будет совсем небольшой. Да и конечный результат будет получен только при получении всех ответов или неответов со сбросом по таймеру...
В общем, попробуйте, конечно, если есть желание...




© OSzone.net 2001-2012