на пхп сложно сделать код проходящий проверки валидатора
но даже наверное больше както чисто субъективно не нравится и все
а многое реально можно сделать в шеловских скриптах
по завершению тспдампа можно так примерно
sudo timeout -9 3 tcpdump -i "$iface" -c 20 | sed 's/$/<br \/>/g'
но нужен timeout и прописать его придется в судоерс для ввв-дата (можно и без этого наверное, но лениво)
(последний вариант, прикрою лавочку через часок)
#!/bin/sh
PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin
### Такое "сложное" определение пути и имени скрипта для обработки разными шелами dash, sh, bash (вставляю всюду на всякий случай)
### и при разных способах вызова, как есть, через точку, по относительному пути, при наличии в PATH и при вызове "eval . xxx"
[ -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='`
ifconfig -s | grep -q "${iface##*=}" && iface=${ifaces##*=}
date
echo '<br /><b>iface: '$iface'</b><br />'
sudo timeout -9 3 tcpdump -i "$iface" -c 20 | 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"
# env >> "/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, 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>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