LINUX.ORG.RU

Помогите с регуляркой на OpenWrt

 , ,


1

1

На Centos работает такая регулярка, на OpenWrt упорно нет.

for a in $(</www/ping/servers); do /usr/bin/nmap `echo $a | sed -e 's/:/ -p /'` | grep -q "/tcp *open " || echo $a; done >> /www/ping/serverlist_n;

Мне нужно проверять открытый порт хостов из списка файла /www/ping/servers и если порт не отвечает открытым, писать ip в файл /www/ping/serverlist_n

192.168.0.30:22 192.168.0.31:21

root@metarouter:~# nmap 192.168.0.31 -p 80

Starting Nmap 5.51 ( http://nmap.org ) at 2014-12-10 18:59 UTC
Nmap scan report for 192.168.0.31
Host is up (0.0045s latency).
PORT   STATE SERVICE
80/tcp open  http
MAC Address: 44:19:B8:1D:61:07 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 12.40 seconds
root@metarouter:~# nmap 192.168.0.31 -p 81

Starting Nmap 5.51 ( http://nmap.org ) at 2014-12-10 18:59 UTC
Nmap scan report for 192.168.0.31
Host is up (0.0080s latency).
PORT   STATE  SERVICE
81/tcp closed hosts2-ns
MAC Address: 44:19:B8:1D:61:07 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 12.53 seconds


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

для повышения читаемости следует посетить эту ссылку.

как пытался решить проблему? какие ошибки код говорит? стоит проверить \r в /www/ping/servers.

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

На Mikrotik:

root@metarouter:/tmp# sed --version
This is not GNU sed version 4.0

На Centos:

sed --version
GNU sed version 4.2.1

Пакет вроде нашел, сейчас попробую поставить. Честно говоря с OpenWRT вообще дел не имел. Поставил виртуалкой на Mikrotik

maxya-zp
() автор топика
Ответ на: комментарий от anonymous

Как решить проблему к сожалению не знаю, поэтому и задал вопрос тут. Код не говорит ошибки, идет выполнять скрипт дальше. Т.е. отрабатывает часть которую я написал - не правильно и идёт дальше. Естественно не получаю нужного результата.

maxya-zp
() автор топика
Ответ на: комментарий от maxya-zp

разбираешь скрипт на составные части и рассматриваешь что происходит, примерно так:

#!/bin/bash

for a in $(</www/ping/servers); do
  echo /usr/bin/nmap `echo $a | sed -e 's/:/ -p /'`
done > /www/ping/debug1 2>&1

for a in $(</www/ping/servers); do
  /usr/bin/nmap `echo $a | sed -e 's/:/ -p /'`
done > /www/ping/debug2 2>&1

for a in $(</www/ping/servers); do
  /usr/bin/nmap `echo $a | sed -e 's/:/ -p /'` |
    grep -q "/tcp *open "
done > /www/ping/debug3 2>&1

(
  cat /www/ping/servers | wc -c
  cat /www/ping/servers | sed 's/\r//g' | wc -c
) > /www/ping/debug3

не найдешь ошибку, тогда оставь в файле /www/ping/servers две строчки, подмени секретные данные в файлах логов и выложи их

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

nano /www/ping/servers
192.168.0.31:80
192.168.0.30:23

Ответ только тут:
nano /www/ping/debug4
32
32

maxya-zp
() автор топика
Ответ на: комментарий от maxya-zp

если удаленное сообщение было истиннм, значит с циклом беда, сделай так:

#!/bin/bash

cat /www/ping/servers | while read a; do
  echo /usr/bin/nmap `echo $a | sed -e 's/:/ -p /'`
done > /www/ping/debug1 2>&1

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

Получаю так

/www/ping/debug1
/usr/bin/nmap 192.168.0.31 -p 80
/usr/bin/nmap 192.168.0.30 -p 23

Причем если #!/bin/bash стоит 1й строкой, то получаю в терминале:
root@metarouter:/tmp# /www/ping/monitor2
-ash: /www/ping/monitor2: not found

maxya-zp
() автор топика
Ответ на: комментарий от maxya-zp

Причем если #!/bin/bash стоит 1й строкой, то получаю в терминале:

это указание интерпретатора скрипта, не ставь раз ругается.

cat /www/ping/servers | while read a; do
  /usr/bin/nmap `echo $a | sed -e 's/:/ -p /'` |
    grep -q "/tcp *open " || echo $a
done >> /www/ping/serverlist_n
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.