LINUX.ORG.RU

Как улучшить команду (bash/python/curl)?

 , ,


0

1
curl --socks5 81.174.31.76:31851 http://whoer.net > /tmp/testip && python3 -c "import sys,re;b=open('/tmp/testip').read();v=re.findall(r'([0-9]+\.[0-9]+\.[0-9]+.[0-9]+)',b);res = v[0] if v else 'failed'; print('-'*30, '\nYour IP:   ', res, '\n','-'*30, '\n')"



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

Пока получился такой вот монстр. С грепом как-то не вышло. Как в баше красиво парсить выдачу курла?

★★★

Последнее исправление: sergey-novikov (всего исправлений: 1)

в баше красиво

Это где-то близко к делению на нуль.

pedobear
()

K.I.S.S.:

curl --socks5 81.174.31.76:31851 http://checkip.dyndns.org | sed 's/[^0-9\.]*//g'

PS: хотя, учитывая, что у тебы в выхлоте не только IP, то и sed можно убрать.

lynx -dump http://checkip.dyndns.org
beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)

А баш у тебя только в том смысле, что из него команды вызываются?

[0-9]+\.[0-9]+\.[0-9]+.[0-9]+

А что питон не поддерживает \d? Или религия не позволяет?

terminator-101
()
curl --socks5 81.174.31.76:31851 -s http://whoer.net |
  sed 's/[<>]/\n/g' |
  sed -n '/^[0-9][0-9\.]*$/p'
anonymous
()
if ip=$(curl --socks5 81.174.31.76:31851 http://whoer.net | grep -Eom1 '([0-9]+\.){3}[0-9]+'); then
    line=$(for (( i = 0; i < 30; ++i )); do echo -n -; done)
    echo "$line"
    echo "$ip"
    echo "$line"
else
    echo failed
fi
shdown
()
Ответ на: комментарий от kim-roader

Кстати, почему все к этому дурному whoer.net прицепились? Героически решаете проблему которой нет? ;)

Берёте нормальный сервис, в котором нет всего этого мусора в выхлопе (да хоть тот же checkip.dyndns.org!) и проблема парзинга исчезает сама собой.

beastie ★★★★★
()
Ответ на: комментарий от terminator-101

В выхлопе, checkip только примитивный html, IP и ничего лишнего. Убираем всё, что не цифры и точки и вуаля — вот он ваш IP. ж)

Т.ч. не надо, всё летает.

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от beastie

Кстати, зачем ты точку экранируешь внутри квадратных скобок? В sed так положено (не знаю sed, к своему стыду:))? Вроде и так работает.

terminator-101
()
Ответ на: комментарий от beastie

это обычно для бссср, та же любовь к бсд в пример

anonymous
()
Ответ на: комментарий от terminator-101

Да, вроде экран не нужен. Привычка. ;)

beastie ★★★★★
()
Ответ на: комментарий от beastie

Да собственно код будет работать с любым подобным сервисом. Даже с тем для которого определение айпишника побочная задача:

curl http://cs.usu.edu.ru/inetsvcs/ping.asp | grep -om1 '[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+'
kim-roader ★★
()
curl --socks5 81.174.31.76:31851 ifconfig.me
curl --socks5 81.174.31.76:31851 myip.dnsdynamic.org

Выбирай.

KillTheCat ★★★★★
()
Ответ на: комментарий от beastie

Берёте нормальный сервис, в котором нет всего этого мусора в выхлопе

Какого еще мусора?

<td colspan=«3» class=«wtr»><div id=«remote_addr» class=«ipadotted»>1.2.3.4</div> </td>

xtraeft ★★☆☆
()
curl -s whoer.net |grep -Po '(?<=<div id="remote_addr" class="ipadotted">).*(?=</div>&nbsp;</td>)'
1.2.3.4
xtraeft ★★☆☆
()
Ответ на: комментарий от bj

Дурачок, при чем тут спамеры? Поверь на слово, они такие идиотские треды создавать не будут.

xtraeft ★★☆☆
()
Последнее исправление: xtraeft (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.