Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: "ifconfig" через веб + "Tcpdump" через веб [РЕШЕНО]  (Прочитано 9037 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн smaharbA

  • Участник
  • *
  • Сообщений: 220
    • Просмотр профиля
Re: ifconfig через веб [РЕШЕНО]
« Ответ #45 : 23 Ноября 2010, 19:17:15 »
счас точно последний вариант с вводом адресов в формате X.X.X.X и X.X.X.0/XX
с простейшей проверкой с помощью ipcalc (и проверяет есть ли он в системе)
если ipcalc есть в системе и введен не валидный адрес, то не фильтрует
если введен X.X.X.X то фильтр вида host X.X.X.X
если введен X.X.X.0/XX то фильтр вида net X.X.X.0/XX
#!/bin/sh

PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin

[ -z "$BASH_SOURCE" ] && BASH_SOURCE=`(echo ${BASH_SOURCE:?}) 2>&1 | cut -d: -f1`
SCRIPT_PATH=${BASH_SOURCE%/*}
SCRIPT_PATH=`cd "$SCRIPT_PATH"&& pwd`
SCRIPT_NAME=${BASH_SOURCE##*/}

echo 'Cache-Control: no-cache'
echo 'Content-Type: text/html'
echo 'Pragma: no-cache'
echo

# exec 2>&1
if [ "${QUERY_STRING%%&*}" = "tcpdump" ]; then
    iface=eth1
    ifaces=`echo ${QUERY_STRING##*tcpdump} | tr '&' '\n' | grep '^iface='`
    address=`echo ${QUERY_STRING##*tcpdump} | tr '&' '\n' | grep '^address=' | sed 's/\s\+//g; s/,/\./g'`
    expression=""
    which ipcalc > /dev/null && ipcalc -n "${address##*=}" | grep -q 'INVALID ADDRESS'
    if [ $? -eq 0 -o -z "${address##*/}" ]; then
        expression=""
    else
        address="${address##*=}"
        [ "${address##*/}" != "${address}" ] && expression="net ${address}" || expression="host  ${address}"
        echo "expression: ${expression}<br />"
    fi
    ifconfig -s | grep -q "${iface##*=}" && iface="${ifaces##*=}"
    date
    echo '<br /><b>iface: '$iface'</b><br />'
    sudo timeout -9 3 tcpdump -n -i "$iface" -c 20 $expression | sed 's/$/<br \/>/g'
#    echo '<table border=1>'
#    awk -F'REMOTE_ADDR=\|HTTP_X_FORWARDED_FOR=' '{ print "<tr><td>"$3"</td><td>"$2"</td></tr>" }' "/tmp/$SCRIPT_NAME/$SCRIPT_NAME.txt" | sort -u | tr -d ';'
#    echo '</table>'
    exit 0
fi

# [ ! -d "/tmp/$SCRIPT_NAME" ] && mkdir -p "/tmp/$SCRIPT_NAME"
# echo `date`': HTTP_X_FORWARDED_FOR='$HTTP_X_FORWARDED_FOR'; REMOTE_ADDR='$REMOTE_ADDR >> "/tmp/$SCRIPT_NAME/$SCRIPT_NAME.txt"
echo '
<html>
<head>
<meta http-equiv="Content-Language" content="ru" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="expires" content="-1">
<meta http-equiv="Cache-control" content="no-store, no-cache, must-revalidate">
<title>tcpdump</title>
<script type = "text/javascript">
var http;
var timer=0;
if (window.ActiveXObject) {
    try {
        http = new ActiveXObject("Msxml2.XMLHTTP");
        }
    catch (e){
        http = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
else if (window.XMLHttpRequest) {
    http = new XMLHttpRequest();
    }

var iface="eth1";

function show() {
    window.clearTimeout(timer);
    if (!http) return;
    ifaces=document.getElementsByTagName("input");
    for (var i=0; i < ifaces.length; i++) {
        if ((ifaces.item(i).name=="iface") && (ifaces.item(i).checked)) {
            if ( iface != ifaces.item(i).value ) http.abort();
            iface=ifaces.item(i).value;
            }
        }
    http.open("GET", "'${SCRIPT_URL}'?tcpdump&iface="+iface+"&address="+document.getElementById("address").value, true);
    http.setRequestHeader("If-Modified-Since", "Thu, 1 Jan 1970 00:00:00 GMT");
    http.onreadystatechange = function() {
        if (http.readyState == 4) {
            document.getElementById("data").innerHTML = http.responseText;
            timer=window.setTimeout("show()",500);
            }
        }
    http.send(null);
    }
</script>
</head>
<body onload="javascript: show()">
<p>'`ifconfig -s | cut -d' ' -f1 | tail -n +2 | sed 's/^\(.*\)/<input type="radio" name="iface" value="\\1" onclick="javascript:show()" \/>\\1/g'`'</p>
<p>IP: <input type="text" id="address" /></p>
<p>HTTP_X_FORWARDED_FOR='$HTTP_X_FORWARDED_FOR'; REMOTE_ADDR='$REMOTE_ADDR'</p>
<div id = "data"></div>
</body>
</html>
' | tidy -asxhtml -utf8 -b -wrap 0

и лавочку закрою )) как схожу за поллитрой
Я конечно далек от мысли...(с)

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Re: ifconfig через веб [РЕШЕНО]
« Ответ #46 : 23 Ноября 2010, 19:54:54 »
Как не обидно, но у меня почему-то эта последняя версия не работает, подскажите плиз как правильно timeout прописать в судоерс для ввв-дата....? Видимо через это не фурычит.

Оффлайн smaharbA

  • Участник
  • *
  • Сообщений: 220
    • Просмотр профиля
Re: ifconfig через веб [РЕШЕНО]
« Ответ #47 : 23 Ноября 2010, 22:11:49 »
www-data ALL=(ALL) NOPASSWD: /usr/sbin/tcpdump, /usr/bin/timeout

timeout нужно конечно установить если нету

(прикрываю)
« Последнее редактирование: 23 Ноября 2010, 22:14:52 от smaharbA »
Я конечно далек от мысли...(с)

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Re: ifconfig через веб [РЕШЕНО]
« Ответ #48 : 23 Ноября 2010, 23:26:27 »
Timeout установил и если через консоль запускать тспдамп , то все работает...

sudo timeout -9 1 tcpdump -n -i eth1
...
...
...
Timeout: aborting command ``tcpdump'' with signal 9
Убито



Но в браузер ничего не выводит. :-

Пользователь решил продолжить мысль 23 Ноября 2010, 23:29:39:
Прошу прощения, у меня не был установлен пакет ipcalc.
Уже все забегало! :D

Пользователь решил продолжить мысль 24 Ноября 2010, 00:35:39:




smaharbA, огромнейшее спасибо за скрипт!
Mam(O)n, выражаю благодарность.
alexander.pronin, спасибо что не обошли стороной
« Последнее редактирование: 24 Ноября 2010, 00:38:50 от TrEK »

Оффлайн smaharbA

  • Участник
  • *
  • Сообщений: 220
    • Просмотр профиля
Re: "ifconfig" через веб + "Tcpdump" через веб [РЕШЕНО]
« Ответ #49 : 24 Ноября 2010, 09:57:51 »
Для флуда - в видузе на ИИС можно сделать то же самое и тоже одним пакетным файлом, безо всяких приблуд и прочих АСП и пыхыпы
Я конечно далек от мысли...(с)

Оффлайн smaharbA

  • Участник
  • *
  • Сообщений: 220
    • Просмотр профиля
Re: "ifconfig" через веб + "Tcpdump" через веб [РЕШЕНО]
« Ответ #50 : 26 Ноября 2010, 18:57:07 »
TrEK - позырил новую версию ? ))
Я конечно далек от мысли...(с)

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Re: "ifconfig" через веб + "Tcpdump" через веб [РЕШЕНО]
« Ответ #51 : 26 Ноября 2010, 20:35:31 »
Да, я вначале подумал что меня уже глючит ... синька в глазах ))
Вот только не пойму, когда выбираешь интерфейс - тогда инфа перестает отображатся,,,

Оффлайн smaharbA

  • Участник
  • *
  • Сообщений: 220
    • Просмотр профиля
Re: "ifconfig" через веб + "Tcpdump" через веб [РЕШЕНО]
« Ответ #52 : 26 Ноября 2010, 21:38:00 »
eth0, eth1 практически всегда отображается
немного идет и по  lo
остальные не использованы по тому и пусто
(в момент выбора фейса сделал "сброс", иногда надо подожтать секунд 5)
фильтр по адресу применяется по нажатию ентера
проверка на валидность адреса минимальна, да и не делает приведение адресов типа X.X.X. и X.X.X.0 к сетям
понимает только X.X.X.X и X.X.X.X/X
« Последнее редактирование: 26 Ноября 2010, 21:40:14 от smaharbA »
Я конечно далек от мысли...(с)

Оффлайн TrEK

  • Автор темы
  • Активист
  • *
  • Сообщений: 738
  • good day in FolK-King life :)
    • Просмотр профиля
    • smallprogs.ru
Re: "ifconfig" через веб + "Tcpdump" через веб [РЕШЕНО]
« Ответ #53 : 26 Ноября 2010, 22:33:39 »
Не знаю.. у меня когда выбираешь етх0 или етх1 пусто сразу... не выводит пакеты. И лишь когда обновишь страничку, чтоб радиус-баттон был "ени" - тогда пакеты начнают отображаться... при чем обновление странички только помогает... если клацнуть на один из интерфейсов доступных.. а потом назад на "ени", тоже вывод не происходит уже. ???

 

Страница сгенерирована за 0.017 секунд. Запросов: 21.