PROBLEMA ejecutar comando de linux desde un CGI [INACTIVE]

Foro destinado a temas no relacionados con BrazilFW.

PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Seg Abr 05, 2010 8:30 pm

Hola creo un archivo CGI llamado netdiscover.cgi en el directorio /var/http/htdocs/cgi-bin/ bueno ahí estoy viendo como hacer un addon que use este comando desde webadmin el problema es que no consigo ejecutar el comando runfile que esta exactamente también en /var/http/htdocs/cgi-bin/ este ejecuta el netdiscover.sh. (se da así porque viene dando vuelta luego lo quiero simplificar)
Tiene permisos todo, creo, pero este no se ejecuta no se genera el proceso ¿Por qué pasa eso? No me deja seguir trabajándolo quiero resolver eso
Si lo hago desde consola si sale bien y este estaría funcionando pero quiero que este se ejecute por CGI.
Alguien tiene la solución o le paso como se hace entonces?

Acá dejo los archivos que uso para ir mas a lo que pasa en la practica

http://rayo969.sslpowered.com/050310ver0.3-beta7/netdiscover.tgz
http://rayo969.sslpowered.com/netdiscover-cgi_v1.04.tgz

este hay que descomprimirlo en /var/http/htdocs/cgi-bin/
http://rayo969.sslpowered.com/runfile.tgz


Imagem

Así es cuando ejecuto el comando desde la consola ósea pasa a funcionar
Imagem

Saludos.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor nachazo » Ter Abr 06, 2010 9:51 am

lo stripeaste el binario? es un poco grande...
nachazo
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor nachazo » Ter Abr 06, 2010 9:56 am

estuve mirando el cgi desde el winrar...

lindo laburito te mandaste :o!

pareciera que tiene que andar... tendria que instalarlo y ver que pasa...

no puedo decirte que lo voy hacer pronto, tengo muchisimo bolonki.... :mrgreen:

saludos.
nachazo
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Ter Abr 06, 2010 10:04 am

okey
Gracias, fíjate luego si podes probarlo en un virtual no se y explicarme porque no consigo arrancar el netdiscover.sh que crea el netdiscover.cgi una ves que se le asigna los parámetros
El archivo se crea pero cuando el cgi le da la orden
./netdiscover.sh &
Parece que todo bien pero no arranca pensé de entrada que era un problema de permisos y algo cambie pero tampoco
Bueno listo si llegas a tener noticia avísame estoy acá buscando resolver eso para ver si lo continuo creando.

PD:el runfile ese binario no hace falta era solo para ver si el problema era el archivo sh pero no fue así que hay que modificar el CGI y cambiarle la línea esa ./runfile &
Por la del sh ese que genera el cgi

Saludos.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor gamba47 » Ter Abr 06, 2010 11:19 am

No tengo un 2.x como para probar.


Se viene un nuevo developer!!

gamba47
Avatar do usuário
gamba47
BFW Beneméritos
 
Mensagens: 7243
Registrado em: Ter Dez 27, 2005 1:51 pm
Localização: Buenos Aires, Argentina
BrazilFW Box: Pentium4 1256mb RAM HD 200gb
BrazilFW 3.0.237 without Squid
3 ADSLs & 1 Cablemodem
50 Users & more!

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor nachazo » Ter Abr 06, 2010 3:27 pm

pablino76 escreveu:okey
Gracias, fíjate luego si podes probarlo en un virtual no se y explicarme porque no consigo arrancar el netdiscover.sh que crea el netdiscover.cgi una ves que se le asigna los parámetros
El archivo se crea pero cuando el cgi le da la orden
./netdiscover.sh &
Parece que todo bien pero no arranca pensé de entrada que era un problema de permisos y algo cambie pero tampoco
Bueno listo si llegas a tener noticia avísame estoy acá buscando resolver eso para ver si lo continuo creando.

PD:el runfile ese binario no hace falta era solo para ver si el problema era el archivo sh pero no fue así que hay que modificar el CGI y cambiarle la línea esa ./runfile &
Por la del sh ese que genera el cgi

Saludos.


fijate coriendo el script sin formulario con un link directo y editando un archivo de texto (bien a lo argento :o! ) si anda asi es un tema del comando en cgi....

saludos...

PD: gamba.... ojala se nos una a la cuadrilla la perdida de juanillo fue muy dura...
nachazo
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor jhonfw » Ter Abr 06, 2010 3:29 pm

pablino76 escreveu:este hay que descomprimirlo en /var/http/htdocs/cgi-bin/

los binarios van en /usr/bin
Avatar do usuário
jhonfw
BFW Advanced
 
Mensagens: 1076
Registrado em: Seg Fev 02, 2009 9:35 pm
BrazilFW Box:

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Ter Abr 06, 2010 4:21 pm

jhonfw si se dio de poner ese runfile porque no es parte del addon que estoy tratando de hacer era parte de una prueba que no funciona preferí ponerla en cgi-bin para ver que se sucedía.

gamba47 escreveu:No tengo un 2.x como para probar.
Se viene un nuevo developer!!
gamba47


Gamba! jaja hola, es todo copy gamba todo copy pegue y algunos retoques maso solo es cocina, me salio esto no se como, puse dos líneas y ahora estoy acá viendo como cerrarlo.
no me veo Developer gracias :o! ja! :arrow: lo que si veo es que tengo como un raye con netdiscover y de potenciarlo al máximo que se me ocurra vamos a ver me interesa las posibilidades que ofrece la capa2.
Saludos.


nachazo escreveu:fijate coriendo el script sin formulario con un link directo y editando un archivo de texto (bien a lo argento :o! ) si anda asi es un tema del comando en cgi....


Nacho voy a ver eso creo que eso lo probé estoy atorado ahí solo se que en algún momento alguna vuelta va funcionar debe haber mil formas y ahora no se me ocurre ni una.

nachazo escreveu:PD: gamba.... ojala se nos una a la cuadrilla la perdida de juanillo fue muy dura...


Si sale algo lo mando acá nacho en el foro, no puedo estudiar un lenguaje al otro día no lo recuerdo bien y ya probe totales de veces,
que paso con juanillo?, lo conozco es el gordo de rulo capo, que creo unos addons varios los tengo bajado a un directorio. Que paso? Se fue?
que vuelva yaaaaaa! juanillo decime como lo cierro porfavor!
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor El guapo Dan » Ter Abr 06, 2010 4:48 pm

Hola.
runfile de donde salió?.
El guapo Dan
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor gamba47 » Ter Abr 06, 2010 4:48 pm

Juan es un groso, ojala algún día regrese.


gamba47

pd. pero tenemos al guapo dan!!
Avatar do usuário
gamba47
BFW Beneméritos
 
Mensagens: 7243
Registrado em: Ter Dez 27, 2005 1:51 pm
Localização: Buenos Aires, Argentina
BrazilFW Box: Pentium4 1256mb RAM HD 200gb
BrazilFW 3.0.237 without Squid
3 ADSLs & 1 Cablemodem
50 Users & more!

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Ter Abr 06, 2010 5:25 pm

El guapo Dan escreveu:Hola.
runfile de donde salió?.


Hola dan ese runfile salio de un c que compile en fedora que es muy simple es este
Código: Selecionar todos
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])                                                                                                 {                                                                                                                                       
       system  ("/var/http/htdocs/cgi-bin/netdiscover.sh");                                                                       
       return 0;
}



Ósea dan, se puede decir que runfile nada que ver fue una prueba que lo que intentaba era poder de ultima probar si ese comando lograba disparar el proceso netdiscover con el netdiscover.sh que contiene los parámetros que son asignados en el form netdiscover inicio.
acá termino recién de probar lo de ponerlo en /usr/bin que me sugirió jhonfw
lo que me sugirió nacho creo que lo probé también recién nose si es exactamente lo que me dijo que haga
lo que si creo que podría también ser un script que cree un temporizador como el comando AT que tienen algunos sistemas y que este sh se dispare en un momento lo mas próximo al time del sistema no se yo sabia que algo me iba a frenar la idea y fue esto porque con ping y otros comando funciona y con este no parecería que hay una configuración del tipo thttpd.conf donde le da permisos a busbox para poder ejecutar sus comandos desde CGI.
la verdad nose pero acá sigo probando y no doy con las teclas.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor El guapo Dan » Ter Abr 06, 2010 6:14 pm

Entiendo, he ahí el problema, necesitas compilar el ejecutable en el buildtree de bfw 2.31.

Prueba ejecutando dentro de bfw "/var/http/htdocs/cgi-bin/runfile", te va a decir "runfile file nor found", simplemente por que bfw no reconoce a runfile como un ejecutable válido. Tambien asegurate que runfile tenga permisos 754.

Saludos.
El guapo Dan
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor macbab » Ter Abr 06, 2010 6:27 pm

Saludos por tu regreso Pablino :aplause: , me temia que no lo hicieras.
Tranqui.....
Abrazo
Marcelo
macbab
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Ter Abr 06, 2010 6:58 pm

El guapo Dan escreveu:Prueba ejecutando dentro de bfw "/var/http/htdocs/cgi-bin/runfile", te va a decir "runfile file nor found", simplemente por que bfw no reconoce a runfile como un ejecutable válido. Tambien asegurate que runfile tenga permisos 754.


Dan mira probé eso que me dijiste del permiso 754 tampoco de todas maneras expongo el script que esta dentro del netdiscover.cgi donde se ve la linea antes de ejecutar el sh le atribuye el permiso /bin/chmod 754 ./netdiscover.sh
por un momento probé algo que me dijo nacho y creí que iba a funcionar que era ejecutarlo como si fuese un texto por consola funciona pero al regresar y probar por webadmin este vuelve a fracasar...haaaaaaa como puede ser! naaaah! :lol:
Código: Selecionar todos
#!/bin/sh
# Netdiscover-CGI  by chango From BrazilFW
. /var/http/web-functions

cl_header2 "Netdiscover - BrazilFW"
if ! [ "$FORM_OKBTN" = "$Fsb" ]; then
cat << CLEOF


<script>
function validar(ip) {
partes=ip.split('.');
if (partes.length!=4) {
 alert("ip no valida");
  return false;
           
}
for (i=0;i<4;i++) {
num=partes[i];
if (num>255 || num<0 || num.length==0 || isNaN(num)){

 alert("ip no valida");
  return false;
}
}

}
</script>

 

<form method="POST" action="/cgi-bin/netdiscover.cgi">
<table border=0 width="100%" class=maintable>
<tr><th colspan=2>Netdiscover Inicio</th></tr>
<tr><td width=50% class=row1 align=right><b>Interface</b></td><td width="50%" class=row2><input type=text name=IF_LOCAL value="${IF_LOCAL}" size=5></td></tr>
<tr><td width=50% class=row1 align=right><b>IP</b></td><td width="50%" class=row2><input type=text name=IPADDRESS size=25 maxlength="15" value="${LOCAL_IPADDR}"></td></tr>
<tr><td width=50% class=row1 align=right><b>Mascara Subred</b></td><td width="50%" class=row2>
<INPUT type="radio" name=SUBRED value="24" checked>24
<INPUT type="radio" name=SUBRED value="16">16
<INPUT type="radio" name=SUBRED value="8">8</td></tr>
<BR>
</table>
<input type=submit value="$Fsb" name=OKBTN onClick="validar(document.all.IPADDRESS.value);"> <input type=reset value="$Fer">
</P>
</FORM>
CLEOF
 cl_footer2
 exit
 fi
echo "#!/bin/sh" >./netdiscover.sh
echo "echo '<meta http-equiv=REFRESH CONTENT=3;URL=./listhost.html><pre><link href=list.css rel=stylesheet type=text/css><div id=footer><p><FONT color=#FFBE0F>Netdiscover</FONT>-CGI <Blink>Monitor</blink></p></div>'>/var/http/htdocs/cgi-bin/listhost.html" >>./netdiscover.sh

echo "/usr/local/sbin/netdiscover -L -i $FORM_IF_LOCAL -r $FORM_IPADDRESS/$FORM_SUBRED >>/var/http/htdocs/cgi-bin/listhost.html &" >>./netdiscover.sh
sleep 2
/bin/chmod 754 ./netdiscover.sh
sleep 2
sh ./netdiscover.sh &

cat << CLEOF
<script>
<!--
function wopen(url, name, w, h)
{
// Fudge factors for window decoration space.
// In my tests these work well on all platforms & browsers.
w += 32;
h += 96;
wleft = (screen.width - w) / 2;
wtop = (screen.height - h) / 2;
// IE5 and other old browsers might allow a window that is
// partially offscreen or wider than the screen. Fix that.
// (Newer browsers fix this for us, but let's be thorough.)
if (wleft < 0) {
w = screen.width;
wleft = 0;
}
if (wtop < 0) {
h = screen.height;
wtop = 0;
}
var win = window.open(url,
name,
'width=' + w + ', height=' + h + ', ' +
'left=' + wleft + ', top=' + wtop + ', ' +
'location=no, menubar=no, ' +
'status=no, toolbar=no, scrollbars=no, resizable=no');
// Just in case width and height are ignored
win.resizeTo(w, h);
// Just in case left and top are ignored
win.moveTo(wleft, wtop);
win.focus();
}
// -->
</script>

<table class=maintable border=3><center><tr><th>.::Netdiscover Menu::.</th></tr><tr><td><br><ol>
<li><a href="/cgi-bin/netdiscover.cgi">Volver</a></li>
<li><a href="./listhost.html" target="popup" onClick="wopen('./listhost.html', 'popup', 600, 450); return false;">Mostrar Resultados</a>
<li><a href="/cgi-bin/diags.cgi?COMMAND=rm /var/http/htdocs/cgi-bin/listhost.html">Borrar Cache</a></li>
<li><a href="/cgi-bin/diags.cgi?COMMAND=killall netdiscover">Terminar Proceso</a></li>

</ol></td></tr></center></table>
CLEOF



macbab escreveu:Saludos por tu regreso Pablino :aplause: , me temia que no lo hicieras.

naaahhh macbab me falla el script!.. y no lo puedo creeeer! :lol: decime porque hacele un análisis de betatester macbab porque esto me tiene descompuesto porfavor bring on the night macbab y yo sabia!.
saludos
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor jhonfw » Ter Abr 06, 2010 7:42 pm

ya
no es problema de path ni de compilacion

1 con el formulario cgi crea el netdicover.sh
Código: Selecionar todos
echo '<meta http-equiv=REFRESH CONTENT=3;URL=./listhost.html><pre><link href=list.css rel=stylesheet type=text/css><div id=footer><p><FONT color=#FFBE0F>Netdiscover</FONT>-CGI <Blink>Monitor</blink></p></div>'>/var/http/htdocs/cgi-bin/listhost.html
/usr/local/sbin/netdiscover -L -i eth0 -r 192.168.1.1/24 >>/var/http/htdocs/cgi-bin/listhost.html &



2 ejecuta netdiscover.sh desde el cgi lo que hace es mostrar el contenido
var/http/htdocs/cgi-bin/listhost.html

si ejecuta netdiscover.sh desde la consola y después va a mostrar en el webmin funciona

u e el problema creo yo
el netdiscover no devuelve texto
es activo como el kismet
entones cuando ejecuta el netdiscover desde el cgi el webmin espera que el programa termine y le devuelva el texto
pero el netdiscover no termina nunca y nunca devuelve texto


si lo ejecuta desde la consola el webmin no espera nada porque otro proceso inicio el netdiscover y por eso funciona
por eso creo que invento el runfile hace una vuelta pero no funciona

por ejemplo si
http://ipsecreta/cgi-bin/diags.cgi?COMM ... %20eth%205
y no tienen eth 5 el netdiscover devolvera un texto de error

y si
http://ipsecreta/cgi-bin/diags.cgi?COMM ... etdiscover
devolverá un error de sementacion fault por que el webmin es incapaz de mostrar la salida dinámica del netdiscover

saludos
Avatar do usuário
jhonfw
BFW Advanced
 
Mensagens: 1076
Registrado em: Seg Fev 02, 2009 9:35 pm
BrazilFW Box:

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Ter Abr 06, 2010 8:01 pm

jhonfw bien claro por eso es que cuando lo ejecuto le doy la fuga con el símbolo :arrow: &
para que escape y el web admin no tire el error de todas formas voy a ver ya esos link

acá se ve el escape
sh ./netdiscover.sh &
si no tuviera ese escape el webadmin tira un error
y claro al crear el sh también arranca y tiene el símbolo

/usr/local/sbin/netdiscover -L -i eth0 -r 192.168.1.1/24 >>/var/http/htdocs/cgi-bin/listhost.html &

jhonfw gracias por seguir el hilo :o!
tanks a todos los que estan
voy a ver los link's esos

PD:pifie no son links ja :lol: esta bien igual si eso masomenos lo sabia igual gracias.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Ter Abr 06, 2010 8:16 pm

jhonfw escreveu:el netdiscover no devuelve texto
es activo como el kismet
entones cuando ejecuta el netdiscover desde el cgi el webmin espera que el programa termine y le devuelva el texto

Claro pero al usar la
netdiscover -L
-L hace que este devuelva los resultados en un archivo texto plano y eso es lo que me da la posibilidad de hacer y safar del problema de la información dinámica o de ser un programa activo; igualmente quizas es mejor si se animan a instalarlo cuando puedan y vean que funciona solo que funciona cuando abren
Una consola y en esta ejecutan estando dentro de
/var/http/htdocs/cgi-bin/
el
brazilfw#./netdiscover.sh
Luego van al webadmin ponen mostrar resultados y ahi funciona y refresca cada tres segundo luego queda en pasivo y cada nueva IP o MAC que circule por la interfase entonces esta será igual rescatada y agregada al listhost.html y se vera por que el refresh del listhost.html continua y el netdiscover queda snifiando en ese modo pasivo.
por eso que luego le agrego al menu el terminar proceso

el proceso seria y quedaría algo así trabajando de fondo
Código: Selecionar todos
brazilfw# ./netdiscover.sh
brazilfw# ps -uax |grep "netdiscover"
16553 root        832 S   /usr/local/sbin/netdiscover -L -i eth0 -r 192.168.0.
16554 root        832 S   /usr/local/sbin/netdiscover -L -i eth0 -r 192.168.0.
16555 root        832 S   /usr/local/sbin/netdiscover -L -i eth0 -r 192.168.0.
16556 root        832 R   /usr/local/sbin/netdiscover -L -i eth0 -r 192.168.0.
brazilfw#


es normal que se repita así aclaro eso.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Ter Abr 06, 2010 10:58 pm

hola de nuevo jajaja re incha estoy ja bien yo voy dejando data acá nada mas para mañana recordar y para los que les pueda ser util el tema
bueno acá dejo apuntada un información que voy recaudando para ver si alguien de ultima puede resolverlo.
dice así
kuthulu
DD-WRT User


Solo por ahora te puedo decir que al ejecutar como cgi el script cada vez se crea una nueva sesion sh para ejecutarlo, así que si guardas algún valor en una variable éste no estará disponible en la siguiente ejecución, si necesitas guardar un valor puedes usar nvram o bien un archivo en /tmp/.
Si lo haces en una sesión de telnet conservarás las variables entre ejecuciones y por eso me imagino que te funciona en la consola pero no en web.


y diría que en parte si, es asi justamente.

en el mejor de los casos puede pasar que si funciona respetando estar dentro de la misma sesión SH salga un error

Invalid extra argument:>>/var/http/htdocs/cgi-bin/listhost.html &


CGI parece no estar muy de acuerdo con los símbolos :arrow: >> que pongo y menos tambien con el símbolo :arrow: & que uso para liberar el proceso desde webadmin
/usr/local/sbin/netdiscover -L -i $FORM_IF_LOCAL -r $FORM_IPADDRESS/$FORM_SUBRED >>/var/http/htdocs/cgi-bin/listhost.html &

Esto masomenos rápidamente los compruebo acá por url al estilo GET así
http://192.168.0.1:8180/cgi-bin/diags.cgi?COMMAND=/usr/local/sbin/netdiscover -L -i eth0 192.168.0.1/24 >/var/http/htdocs/cgi-bin/listhost.html &
nota:Si le saco los símbolos de mayor se genera un Segmentación fault así que si o si van.

Cosa que no pasa vuelvo a repetir si lo hago a través de la consola va todo bien eso creo que ya quedo claro digamos.

----------
Entonces las mis preguntas ahora son mas que nada

¿Como se hace para indicarle a CGI que los símbolos >> significa crear listhost.html y el símbolo & es fugar y liberarse? o como se le quiera dar a entender
¿Conocen una forma de mantenerse también dentro de la misma sesión SH dentro de la posibilidad que hice el script netdiscover.cgi?
Editado pela última vez por pablino76 em Qua Abr 07, 2010 8:47 pm, em um total de 1 vez.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Qua Abr 07, 2010 2:52 pm

Hola gente estoy tratando de usar el comando crontrab que esta en brazilfw para realizar una tarea programa pero esta no parece andar

estoy editando el archivo :
edit /var/spool/cron/crontabs/root

y agregandole

# Example : runfile netdiscover at 14:27pm every monday and todos los dias
27 14 * * * runfile

sin embargo al ser las 14 hs 27 minutos este no se ejecuta
Como se usa entonces?
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor macbab » Qua Abr 07, 2010 3:05 pm

Mira, no se si sera el caso pero te cuento que me ha pasado que
modificando directamente los archivos de configuracion el BFW por consola
no me respondia a las modificaciones pero cuando lo hacia desde el webadmin si.
No en el caso del cron pero si cambiando el puerto del ssh por ej.
Fijate, quizas ayuda ...

Saludos

Marcelo
macbab
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor nachazo » Qua Abr 07, 2010 3:27 pm

pablino76 escreveu:Hola gente estoy tratando de usar el comando crontrab que esta en brazilfw para realizar una tarea programa pero esta no parece andar

estoy editando el archivo :
edit /var/spool/cron/crontabs/root

y agregandole

# Example : runfile netdiscover at 14:27pm every monday and todos los dias
27 14 * * * runfile

sin embargo al ser las 14 hs 27 minutos este no se ejecuta
Como se usa entonces?


el contrab sale en el log...

fijate que este activado en el apartado de administracion del webmin.

saludos.
nachazo
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Qua Abr 07, 2010 3:33 pm

Nacho! hola
si listo
me faltaba hacer
echo "26 15 * * * runfile">/var/spool/cron/crontabs/root
sh bin/cron.reload


pero no va nacho esperar a veces 30 quizas o menos o más segundos o un minuto para que arranque?.

estaria mejor si se ejecutara de inmediato.no logro imaginar otra.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Qua Abr 07, 2010 6:56 pm

Mas o menos rescate poder solucionarlo de alguna forma depende de un time pero arranca por lo menos automatizado

/bin/chmod +x ./netdiscover.sh
sleep 1
./netdiscover.sh &
sleep 1
MINUTOS=`uptime |cut -d":" -f2`
let SUMA=$MINUTOS+1
HORA=`uptime |cut -d":" -f1`
echo "$SUMA $HORA * * * runfile">/var/spool/cron/crontabs/root
sleep 1
/usr/bin/crontab /var/spool/cron/crontabs/root


luego de usarlo estoy viendo implementar el poder borrar esa tarea cron agregado a root con algo así.

#!/bin/sh
grep "runfile" -n /var/spool/cron/crontabs/root |cut -d":" -f1
sed -i Xd /var/spool/cron/crontabs/root


Donde X es el numero de linea pero al final estoy viendo que se pone engorroso porque observe que si falla y hay dos cron runfile en el file root entonces sed puede fallar
si alguien usa crontab seriamente puede ocacionarle problema al borrar ya tareas preprogramadas etc

Yo estoy buscando ejecutarlo sin cron si alguien llega a dilucidar mejor cual es esa forma de ejcutarlo tras el submit del form inicio coméntelo por favor gracias.
saludos.se me tosto el cerebro.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor nachazo » Qua Abr 07, 2010 7:50 pm

se me tosto el cerebro.


\`´/
nachazo
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Qui Abr 08, 2010 2:05 am

Código: Selecionar todos
#!/bin/sh
#Netdiscover-CGI by Chango From BrazilFW
. /var/http/web-functions
cl_header2 "Netdiscover - BrazilFW"

LINEA=`grep "runfile" -n /var/spool/cron/crontabs/root |cut -d":" -f1`
sleep 1
sed -i 1d /var/spool/cron/crontabs/root
killall netdiscover
rm /var/http/htdocs/cgi-bin/listhost.html
echo "<h1><blink>Cancelado</blink></h1>" >/var/http/htdocs/cgi-bin/listhost.html

if [ -n "$FORM_COMMAND" ] ; then
sh ./netdiscover.cgi
  COMMAND=$FORM_COMMAND
 
  if [ -n "$FORM_PARAMNAME" ] ; then
    echo "<center><form method=POST action=/cgi-bin/netdiscover.cgi>"
    echo "$FORM_PARAMNAME"
    echo " : "
    echo "<input type=text size=30 name=PARAM value=\"$FORM_PARAM\">  "
    echo "<input type=submit value= $Feo >"
    echo "<input type=hidden name=COMMAND value=\"$FORM_COMMAND\">"
    echo "<input type=hidden name=PARAMNAME value=\"$FORM_PARAMNAME\"></form></center>"
   
   
   
    COMMAND=`echo $COMMAND | sed s/MARK_param_MARK/$FORM_PARAM/`
 fi
  echo "<pre>"
  if [ -n "$FORM_PARAM" -o -z "$FORM_PARAMNAME" ] ; then
    $COMMAND
  fi
  echo "</pre></td></tr></table>"
else





if ! [ "$FORM_OKBTN" = "$Fsb" ]; then
cat << CLEOF


<script>
function validar(ip) {
partes=ip.split('.');
if (partes.length!=4) {
 alert("ip no valida");
  return false;
           
}
for (i=0;i<4;i++) {
num=partes[i];
if (num>255 || num<0 || num.length==0 || isNaN(num)){

 alert("ip no valida");
  return false;
}
}

}
</script>

 

<form method="POST" action="/cgi-bin/netdiscover.cgi">
<table border=0 width="60%" class=maintable>
<tr><th colspan=2>Netdiscover Inicio</th></tr>
<tr><td width=50% class=row1 align=right><b>Interface</b></td><td width="50%" class=row2><input type=text name=IF_LOCAL value="${IF_LOCAL}" size=5></td></tr>
<tr><td width=50% class=row1 align=right><b>IP</b></td><td width="50%" class=row2><input type=text name=IPADDRESS size=25 maxlength="15" value="${LOCAL_IPADDR}"></td></tr>
<tr><td width=50% class=row1 align=right><b>Mascara Subred</b></td><td width="50%" class=row2>
<INPUT type="radio" name=SUBRED value="24" checked>24
<INPUT type="radio" name=SUBRED value="16">16
<INPUT type="radio" name=SUBRED value="8">8</td></tr>
<BR>
</table>
<input type=submit value="$Fsb" name=OKBTN onClick="validar(document.all.IPADDRESS.value);"> <input type=reset value="$Fer">
</P>
</FORM>
CLEOF
 cl_footer2
 exit
 fi
echo "#!/bin/sh" >./netdiscover.sh
echo "echo '<meta http-equiv=REFRESH CONTENT=3;URL=./listhost.html><pre><link href=list.css rel=stylesheet type=text/css><div id=footer><p><FONT color=#FFBE0F>Netdiscover</FONT>-CGI <Blink>Monitor</blink></p></div>'>/var/http/htdocs/cgi-bin/listhost.html" >>./netdiscover.sh
echo "/usr/local/sbin/netdiscover -L -i $FORM_IF_LOCAL -r $FORM_IPADDRESS/$FORM_SUBRED >>/var/http/htdocs/cgi-bin/listhost.html &" >>./netdiscover.sh

/bin/chmod +x ./netdiscover.sh
sleep 1
./netdiscover.sh &
sleep 1
MINUTOS=`uptime |cut -d":" -f2`

if [ $MINUTOS ]
then
  case "$MINUTOS" in
    01)
      MINUTOS=1
      ;;

    02)
      MINUTOS=2
      ;;

    03)
      MINUTOS=3
      ;;

    04)
      MINUTOS=4
      ;;

     05)
      MINUTOS=5
      ;;
    
     06)
      MINUTOS=6
      ;;
    
     07)
      MINUTOS=7
      ;;
    
     08)
      MINUTOS=8
      ;;
    
     09)
      MINUTOS=9
      ;;
    
     00)
      MINUTOS=1
      ;;
    
    
   
     
  esac
fi

let SUMA=$MINUTOS+1
HORA=`uptime |cut -d":" -f1`
echo "$SUMA $HORA * * * runfile">>/var/spool/cron/crontabs/root
sleep 1
/usr/bin/crontab /var/spool/cron/crontabs/root



cat << CLEOF
<script>
<!--
function wopen(url, name, w, h)
{
// Fudge factors for window decoration space.
// In my tests these work well on all platforms & browsers.
w += 32;
h += 96;
wleft = (screen.width - w) / 2;
wtop = (screen.height - h) / 2;
// IE5 and other old browsers might allow a window that is
// partially offscreen or wider than the screen. Fix that.
// (Newer browsers fix this for us, but let's be thorough.)
if (wleft < 0) {
w = screen.width;
wleft = 0;
}
if (wtop < 0) {
h = screen.height;
wtop = 0;
}
var win = window.open(url,
name,
'width=' + w + ', height=' + h + ', ' +
'left=' + wleft + ', top=' + wtop + ', ' +
'location=no, menubar=no, ' +
'status=no, toolbar=no, scrollbars=no, resizable=no');
// Just in case width and height are ignored
win.resizeTo(w, h);
// Just in case left and top are ignored
win.moveTo(wleft, wtop);
win.focus();
}
// -->
</script>

<table class=maintable border=0><center><tr><th>.::Netdiscover Menu::.</th></tr><tr><td><br><ol>
<li><a href="./listhost.html" target="popup" onClick="wopen('./listhost.html', 'popup', 600, 450); return false;">Mostrar Resultados</a>

<li><a href="/cgi-bin/netdiscover.cgi">Cancelar</a></li>
</ol></td></tr></center></table>
CLEOF
fi
cl_footer2
exit



Me queda un detalle puntual quizás entre varios no se pero este es puntual
no puedo usar el sed acá con la variable alguien sabe como scriptarla?

LINEA=`grep "runfile" -n /var/spool/cron/crontabs/root |cut -d":" -f1`
sleep 1
sed -i 1d /var/spool/cron/crontabs/root


Así es como esta ahí dice que siempre va borrar la línea 1 del archivo root
ósea esta peligro para el que tiene cron time rutinas armadas en BFW
si pudiera aprovechar la variable LINEA entonces ahí ya cierro mejor y borro puntual solo la linea runfile dentro del cron.

LINEA=`grep "runfile" -n /var/spool/cron/crontabs/root |cut -d":" -f1`
sleep 1
sed -i $LINEAd /var/spool/cron/crontabs/root


$LINEAd me da error claro
$LINEA d tambien me da error

ya la googliee y no doy nose como es ¿como es?

saludos.Imagem
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor AdslWiFi » Qui Abr 08, 2010 5:31 am

Como ya dije en su momento.... cuando se trabaja bien y merece la pena, hay que ayudar aunque cueste trabajo responder,... 0 comentarios.

Ataca directamente el archivo de cron:

Código: Selecionar todos
    # Borramos líneas que contengan la palabra runfile.
    sed -e '/runfile/d' /var/spool/cron/crontabs/root > /var/spool/cron/crontabs/root.tmp
    # Ahora vamos a borrar las lineas en blanco que van apareciendo y ademas recuperamos el
    # contenido que queremos en el archivo correcto.
    sed '/^$/d' /var/spool/cron/crontabs/root.tmp > /var/spool/cron/crontabs/root
    # Borramos el archivo temporal que ya no nos sirve.
    rm /var/spool/cron/crontabs/root.tmp
    # No nos olvidemos de recargar el cron
    /usr/sbin/cron.reload


De todos modos no creo sea la forma mas correcta de correr netdiscover.
Avatar do usuário
AdslWiFi
BFW Beneméritos
 
Mensagens: 2722
Registrado em: Dom Mar 15, 2009 9:25 pm
Localização: España - Madrid
BrazilFW Box:

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Qui Abr 08, 2010 10:34 am

adslwifi! claro! Imagem ahí esta bien, la línea que me faltaba era estaa!

sed -i '/runfile/d' /var/spool/cron/crontabs/root

el archivo seria este

Código: Selecionar todos
#!/bin/sh
#Netdiscover-CGI by chango From BrazilFW

. /var/http/web-functions
cl_header2 "Netdiscover - BrazilFW"

sed -i '/runfile/d' /var/spool/cron/crontabs/root
killall netdiscover
rm /var/http/htdocs/cgi-bin/listhost.html
echo "<h1><blink>Cancelado</blink></h1>" >/var/http/htdocs/cgi-bin/listhost.html

if [ -n "$FORM_COMMAND" ] ; then
sh ./netdiscover.cgi
  COMMAND=$FORM_COMMAND
 
  if [ -n "$FORM_PARAMNAME" ] ; then
    echo "<center><form method=POST action=/cgi-bin/netdiscover.cgi>"
    echo "$FORM_PARAMNAME"
    echo " : "
    echo "<input type=text size=30 name=PARAM value=\"$FORM_PARAM\">  "
    echo "<input type=submit value= $Feo >"
    echo "<input type=hidden name=COMMAND value=\"$FORM_COMMAND\">"
    echo "<input type=hidden name=PARAMNAME value=\"$FORM_PARAMNAME\"></form></center>"
   
   
   
    COMMAND=`echo $COMMAND | sed s/MARK_param_MARK/$FORM_PARAM/`
 fi
  echo "<pre>"
  if [ -n "$FORM_PARAM" -o -z "$FORM_PARAMNAME" ] ; then
    $COMMAND
  fi
  echo "</pre></td></tr></table>"
else

if ! [ "$FORM_OKBTN" = "$Fsb" ]; then
cat << CLEOF


<script>
function validar(ip) {
partes=ip.split('.');
if (partes.length!=4) {
 alert("ip no valida");
  return false;
           
}
for (i=0;i<4;i++) {
num=partes[i];
if (num>255 || num<0 || num.length==0 || isNaN(num)){

 alert("ip no valida");
  return false;
}
}

}
</script>

 

<form method="POST" action="/cgi-bin/netdiscover.cgi">
<table border=0 width="60%" class=maintable>
<tr><th colspan=2>Netdiscover Inicio</th></tr>
<tr><td width=50% class=row1 align=right><b>Interface</b></td><td width="50%" class=row2><input type=text name=IF_LOCAL value="${IF_LOCAL}" size=5></td></tr>
<tr><td width=50% class=row1 align=right><b>IP</b></td><td width="50%" class=row2><input type=text name=IPADDRESS size=25 maxlength="15" value="${LOCAL_IPADDR}"></td></tr>
<tr><td width=50% class=row1 align=right><b>Mascara Subred</b></td><td width="50%" class=row2>
<INPUT type="radio" name=SUBRED value="24" checked>24
<INPUT type="radio" name=SUBRED value="16">16
<INPUT type="radio" name=SUBRED value="8">8</td></tr>
<BR>
</table>
<input type=submit value="$Fsb" name=OKBTN onClick="validar(document.all.IPADDRESS.value);"> <input type=reset value="$Fer">
</P>
</FORM>
CLEOF
 cl_footer2
 exit
 fi
echo "#!/bin/sh" >./netdiscover.sh
echo "echo '<meta http-equiv=REFRESH CONTENT=3;URL=./listhost.html><pre><link href=list.css rel=stylesheet type=text/css><div id=footer><p><FONT color=#FFBE0F>Netdiscover</FONT>-CGI <Blink>Monitor</blink></p></div>'>/var/http/htdocs/cgi-bin/listhost.html" >>./netdiscover.sh
echo "/usr/local/sbin/netdiscover -L -i $FORM_IF_LOCAL -r $FORM_IPADDRESS/$FORM_SUBRED >>/var/http/htdocs/cgi-bin/listhost.html &" >>./netdiscover.sh

/bin/chmod +x ./netdiscover.sh
sleep 1
./netdiscover.sh &
sleep 1
MINUTOS=`uptime |cut -d":" -f2`

if [ $MINUTOS ]
then
  case "$MINUTOS" in
    01)
      MINUTOS=1
      ;;

    02)
      MINUTOS=2
      ;;

    03)
      MINUTOS=3
      ;;

    04)
      MINUTOS=4
      ;;

     05)
      MINUTOS=5
      ;;
    
     06)
      MINUTOS=6
      ;;
    
     07)
      MINUTOS=7
      ;;
    
     08)
      MINUTOS=8
      ;;
    
     09)
      MINUTOS=9
      ;;
    
     00)
      MINUTOS=1
      ;;
    
    
   
     
  esac
fi

let SUMA=$MINUTOS+1
HORA=`uptime |cut -d":" -f1`
echo "$SUMA $HORA * * * runfile">>/var/spool/cron/crontabs/root
sleep 1
/usr/bin/crontab /var/spool/cron/crontabs/root



cat << CLEOF
<script>
<!--
function wopen(url, name, w, h)
{
// Fudge factors for window decoration space.
// In my tests these work well on all platforms & browsers.
w += 32;
h += 96;
wleft = (screen.width - w) / 2;
wtop = (screen.height - h) / 2;
// IE5 and other old browsers might allow a window that is
// partially offscreen or wider than the screen. Fix that.
// (Newer browsers fix this for us, but let's be thorough.)
if (wleft < 0) {
w = screen.width;
wleft = 0;
}
if (wtop < 0) {
h = screen.height;
wtop = 0;
}
var win = window.open(url,
name,
'width=' + w + ', height=' + h + ', ' +
'left=' + wleft + ', top=' + wtop + ', ' +
'location=no, menubar=no, ' +
'status=no, toolbar=no, scrollbars=no, resizable=no');
// Just in case width and height are ignored
win.resizeTo(w, h);
// Just in case left and top are ignored
win.moveTo(wleft, wtop);
win.focus();
}
// -->
</script>

<table class=maintable border=0><center><tr><th>.::Netdiscover Menu::.</th></tr><tr><td><br><ol>
<li><a href="./listhost.html" target="popup" onClick="wopen('./listhost.html', 'popup', 600, 450); return false;">Mostrar Resultados</a>

<li><a href="/cgi-bin/netdiscover.cgi">Cancelar</a></li>
</ol></td></tr></center></table>
CLEOF
fi
cl_footer2
exit



adsl sabes como hacer que no aparezca esa respuesta?
killall: netdiscover: no process killed
que debes en cuando aparece.(se porque es pero)
Me es imprescindible que este al principio del archivo CGI este el killall netdiscover cuando este se esta ejecutando no es problema
Pero cuando este no esta en los procesos entonces sale con la respuesta esa de
killall: netdiscover: no process killed
Quisiera que eso tenga algun tipo de salida no mostrada o NULL


AdslWiFi escreveu:De todos modos no creo sea la forma mas correcta de correr netdiscover.


pero por el momento es lo que mas se pudo y da la sensación de por lo menos arrancar automático
estoy buscando como hacerlo justamente tras el submit pero esta bueno esta experiencia de CRON y SED.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor AdslWiFi » Qui Abr 08, 2010 11:21 am

Eso mismo fue una de mis primeras preguntas en el foro...

Si quieres que no salga el resultado de algún comando, añade > /dev/null 2>&1 al final de la sentencia.

En este caso sería así:

Código: Selecionar todos
killall netdiscover > /dev/null 2>&1


Respecto al código de cron ojo con las lineas en blanco que vas dejando, cuando te des cuenta el cron tendrá muchas lineas en blanco, utiliza el código que te dí.
Avatar do usuário
AdslWiFi
BFW Beneméritos
 
Mensagens: 2722
Registrado em: Dom Mar 15, 2009 9:25 pm
Localização: España - Madrid
BrazilFW Box:

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Qui Abr 08, 2010 12:10 pm

Imagem ahí quedo genial muy buena esa línea null, tanks!

Voy a tener en cuenta lo de los espacios en blanco
si ves que lo podes refinar mas el código del CGI postialo me interesa
la otra es que quiero ahora hacer dos tablas una al lado de la otra
y no me sale estoy viendo como
una llamada netdiscover inicio y la otra Ifconfig donde va salir dicho
resultado ifconfig u otra especificacion puede ser un help pero al lado derecho de la tabla Netdiscover menu

ahora estoy en plan de agregarle mas opciones al formulario Netdiscover inicio también
otra cosa que me tiene pensado es poder ir viendo el rango de barrido que se esta sucediendo
pero eso me parece que voy a tener que modificar algo del source de netdiscover por ahora
mas funciones al form inicio.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor AdslWiFi » Qui Abr 08, 2010 12:15 pm

pablino76 escreveu:la otra es que quiero ahora hacer dos tablas una al lado de la otra
y no me sale estoy viendo como
una llamada netdiscover inicio y la otra Ifconfig donde va salir dicho
resultado ifconfig u otra especificacion puede ser un help pero al lado derecho de la tabla Netdiscover menu


Haz un copi - paste del codigo de TCP - Outgoing, tiene lo que pides.

pablino76 escreveu:ahora estoy en plan de agregarle mas opciones al formulario Netdiscover inicio también
otra cosa que me tiene pensado es poder ir viendo el rango de barrido que se esta sucediendo
pero eso me parece que voy a tener que modificar algo del source de netdiscover por ahora
mas funciones al form inicio.


Para eso tienes que sacar el codigo fuente del archivo /usr/local/sbin/netdiscover
Avatar do usuário
AdslWiFi
BFW Beneméritos
 
Mensagens: 2722
Registrado em: Dom Mar 15, 2009 9:25 pm
Localização: España - Madrid
BrazilFW Box:

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Qui Abr 08, 2010 12:56 pm

Claro si lo estoy mirando lo instale pero no uso squid así que encima miro el código pero no veo como discrimina una tabla a la izquierda y la otra a la derecha
estoy googleando hay muchos ejemplos en la web de como crear tablas separadas pero no consigo hacer la adaptación pienso que será porque el formato de tabla Netdiscover inicio que es class=maintable no va dejar que otra tabla se cree a su lado lateral derecho.
tengo que estudiarla mas a ver como va.
adsl viste esa parte en el hilo este donde pongo que cgi tiene el problema de no darle la interpretación adecuada a los símbolos mayores y &? eso hace que el netdiscover no consiga ejecutarse al pasar por el antes agregado al cgi ./netdiscover.sh que yo probé de entrada hacer.

Muy bueno el TCPoutgoing Congratulation! muy prolijo el codigo luego cuando este mas avanzado voy a ver si yo también comento un poco el código cgi que estoy haciendo.Imagem

list.css que hace falta este en /var/http/htdocs/cgi-bin/
fundamental para que el monitor list.html se vea bin con los colores y el Footer

Código: Selecionar todos
/*------------------------------------------------------------*
**  Footer
**------------------------------------------------------------*/      
#footer {   
position: absolute !important;
width: 100% !important;
z-index: 200 !important;
position: relative;   
padding: 11px 0;   
margin-top: -15px;
background-color: #006699;      
color: #999;   
font-size: 16px;
border-top: 3px solid #ccc;
}   
#footer p { margin: 0 10px; text-align: center; }   
#footer a:hover { background-color: #222; }
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Qui Abr 08, 2010 4:59 pm

Che acá me salta el láser a cualquier tema y no se como se dio pero dejo una rareza que me salio es un arping-cgi pero fuera del formato clásico de colores de brazilfw extraño lo iba a descartar pero mejor que quede por acá a ver si alguien se le ocurre otra cosa.

es extraño por lo menos para mi ver que se sale de lo visual
lo peine un poco y quedo así
Código: Selecionar todos
#!/bin/sh
. /var/http/web-functions


echo Content-type: text/html
echo ""

/bin/cat << EOM
<HTML>
<HEAD><TITLE>Arping-CGI: Arping </TITLE>
</HEAD>
<P>
<BODY bgcolor="#cccccc" text="#000000">
<table width="100%" border="0" >
<tr bgcolor="#ffcc33">
<td><b><big>AREA PRUEBAS CAPA II</big></b></td></tr>
<tr><td><a href="/cgi-bin/arping.cgi?COMMAND=arping -c 4 MARK_param_MARK&PARAMNAME=IP Number or Host Name"><b><big>ARPING</b></big></a></td>
          </tr>
<SMALL>
<PRE>
EOM
if [ -n "$FORM_COMMAND" ] ; then
  COMMAND=$FORM_COMMAND
  echo "<table class=maintable><tr><td nowrap>"
  if [ -n "$FORM_PARAMNAME" ] ; then
    echo "<center><form method=POST action=/cgi-bin/arping.cgi>"
    echo "$FORM_PARAMNAME"
    echo "&nbsp;:&nbsp;"
    echo "<input type=text size=30 name=PARAM value=\"$FORM_PARAM\">&nbsp;&nbsp;"
    echo "<input type=submit value=&nbsp;$Feo&nbsp;>"
    echo "<input type=hidden name=COMMAND value=\"$FORM_COMMAND\">"
    echo "<input type=hidden name=PARAMNAME value=\"$FORM_PARAMNAME\"></form></center>"
    echo "</td></tr><tr><td nowrap>"
    COMMAND=`echo $COMMAND | sed s/MARK_param_MARK/$FORM_PARAM/`
  fi
  echo "<pre>"
  if [ -n "$FORM_PARAM" -o -z "$FORM_PARAMNAME" ] ; then
    $COMMAND
  fi
cat << EOM
</PRE>
</SMALL>
<P>
</BODY>
</HTML>
EOM

fi


Por eso hago off-topic porque me salgo un poco.
yo quería saber si no es posible hacer un tallercito de arte un poco fuera del foro donde no moleste y se pueda
Exponer cualquier cosa como mis webadas.tgz y ver si hay otros que tienen cosas raras echas en brazilfw que
no tienen mucho que ver con la parte redes.
tipo taller arte redes.Imagem
Saludos.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor AdslWiFi » Sex Abr 09, 2010 7:15 am

ajá... perfecto, esta noche si tengo un rato de lugar miro como queda y si te parece modifico lo que crea oportuno si veo algo.

Por cierto pablino... ¿de donde eres?...

Saludos...
Avatar do usuário
AdslWiFi
BFW Beneméritos
 
Mensagens: 2722
Registrado em: Dom Mar 15, 2009 9:25 pm
Localização: España - Madrid
BrazilFW Box:

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Sex Abr 09, 2010 9:29 am

Hola recién llego bueno que bueno interesante si conseguís mejorarlo me interesa :o!
yo soy de misiones un pueblo medio perdido limítrofe con Paraguay donde se escucha mucha música justamente del paraguay acá se toma Caña mucho oro verde sombrero y mucho Proxy también pero las cosas no son tan fáciles así que puede que en un tiempo mas valla para una isla de brasil um poco más Tranquilo y sin tantas armas.

adsl me interesa mucho conseguir un buen manual de CGI bash script.
algo así como tus códigos donde se explica que es o mas puntualmente
Como leer vocalmente o interpretar una línea mentalmente.
Editado pela última vez por pablino76 em Sex Abr 09, 2010 11:35 am, em um total de 1 vez.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Sex Abr 09, 2010 9:57 am

adsl dejo el que tiene la tabla a la derecha que ayer estaba queriendo incluir y algo mas entre otras cosas deje este ayer así.
hoy estaba pensando como hacer la parte de incluir un textarea dentro del mismo pero solo que se vea cuando el usuario
dice o elije la opción > escanear redes desde un archivo
que seria algo así como

netdiscover -L -l file_redes

dentro del archivo file_redes iría algo simple como esto y ya funciona
ejemplo:
Código: Selecionar todos
192.168.0.1/24
192.168.90.1/24
10.0.0.1/16




Código: Selecionar todos
#!/bin/sh

. /var/http/web-functions

cl_header2 "Netdiscover - BrazilFW"
#----------------------------------------------------------
#comentar esta linea es solo para crear el archivo prueba formulario derecho
echo "Formulario tabla Menu" >infotxt
#----------------------------------------------------------

sed -i '/runfile/d' /var/spool/cron/crontabs/root > /dev/null 2>&1
killall netdiscover > /dev/null 2>&1
rm /var/http/htdocs/cgi-bin/listhost.html > /dev/null 2>&1
echo "<h1><blink>Cancelado</blink></h1>" >/var/http/htdocs/cgi-bin/listhost.html

if [ -n "$FORM_COMMAND" ] ; then
  COMMAND=$FORM_COMMAND
 
  if [ -n "$FORM_PARAMNAME" ] ; then
    echo "<center><form method=POST action=/cgi-bin/netdiscover.cgi>"
    echo "$FORM_PARAMNAME"
    echo " : "
    echo "<input type=text size=30 name=PARAM value=\"$FORM_PARAM\">  "
    echo "<input type=submit value= $Feo >"
    echo "<input type=hidden name=COMMAND value=\"$FORM_COMMAND\">"
    echo "<input type=hidden name=PARAMNAME value=\"$FORM_PARAMNAME\"></form></center>"
   
    COMMAND=`echo $COMMAND | sed s/MARK_param_MARK/$FORM_PARAM/`
 fi
  echo "<pre>"
  if [ -n "$FORM_PARAM" -o -z "$FORM_PARAMNAME" ] ; then
    $COMMAND
  fi
  echo "</pre></td></tr></table>"
else

if ! [ "$FORM_OKBTN" = "$Fsb" ]; then

cat << CLEOF
<script>
function validar(ip) {
partes=ip.split('.');
if (partes.length!=4) {
 alert("ip no valida");
  return false;
           
}
for (i=0;i<4;i++) {
num=partes[i];
if (num>255 || num<0 || num.length==0 || isNaN(num)){

 alert("ip no valida");
  return false;
}
}

}
</script>


<form method="POST" action="/cgi-bin/netdiscover.cgi">
<table border=0 width="100%" class=maintable>
<tr><th colspan=2>Netdiscover Basico</th></tr>
<tr><td width=50% class=row1 align=right><b>Interface</b></td><td width="50%" class=row2><input type=text name=IF_LOCAL value="${IF_LOCAL}" size=5></td></tr>
<tr><td width=50% class=row1 align=right><b>IP</b></td><td width="50%" class=row2><input type=text name=IPADDRESS size=25 maxlength="15" value="${LOCAL_IPADDR}"></td></tr>
<tr><td width=50% class=row1 align=right><b>Mascara Subred</b></td><td width="50%" class=row2>
<INPUT type="radio" name=SUBRED value="24" checked>24
<INPUT type="radio" name=SUBRED value="16">16
<INPUT type="radio" name=SUBRED value="8">8</td></tr>
</table>
<input type=submit value="$Fsb" name=OKBTN onClick="validar(document.all.IPADDRESS.value);"> <input type=reset value="$Fer">

<!--tabla de informacion-->

<td width="100%">
<table border=0 class=maintable>
<tr>
<tr><th colspan=2>Otras opciones</th></tr>
<td id=textoexterno>
<object type="text/plain"data="infotxt"></object>
</td>
</tr>
</table>
<!--fin de las tablas de informacion-->

</P>
</FORM>
CLEOF
cl_footer2
exit
fi

echo "#!/bin/sh" >./netdiscover.sh
echo "echo '<meta http-equiv=REFRESH CONTENT=3;URL=./listhost.html><pre><link href=list.css rel=stylesheet type=text/css><div id=footer><p><FONT color=#FFBE0F>Netdiscover</FONT>-CGI <Blink>Monitor</blink></p></div>'>/var/http/htdocs/cgi-bin/listhost.html" >>./netdiscover.sh
echo "/usr/local/sbin/netdiscover -L -i $FORM_IF_LOCAL -r $FORM_IPADDRESS/$FORM_SUBRED >>/var/http/htdocs/cgi-bin/listhost.html &" >>./netdiscover.sh

/bin/chmod +x ./netdiscover.sh
sleep 1
./netdiscover.sh &
sleep 1
MINUTOS=`uptime |cut -d":" -f2`

if [ $MINUTOS ]
then
  case "$MINUTOS" in
    01)
      MINUTOS=1
      ;;

    02)
      MINUTOS=2
      ;;

    03)
      MINUTOS=3
      ;;

    04)
      MINUTOS=4
      ;;

     05)
      MINUTOS=5
      ;;
    
     06)
      MINUTOS=6
      ;;
    
     07)
      MINUTOS=7
      ;;
    
     08)
      MINUTOS=8
      ;;
    
     09)
      MINUTOS=9
      ;;
    
     00)
      MINUTOS=1
      ;;
    
    
   
     
  esac
fi

let SUMA=$MINUTOS+1
HORA=`uptime |cut -d":" -f1`
echo "$SUMA $HORA * * * runfile">>/var/spool/cron/crontabs/root
sleep 1
/usr/bin/crontab /var/spool/cron/crontabs/root

cat << CLEOF
<script>
<!--
function wopen(url, name, w, h)
{
// Fudge factors for window decoration space.
// In my tests these work well on all platforms & browsers.
w += 32;
h += 96;
wleft = (screen.width - w) / 2;
wtop = (screen.height - h) / 2;
// IE5 and other old browsers might allow a window that is
// partially offscreen or wider than the screen. Fix that.
// (Newer browsers fix this for us, but let's be thorough.)
if (wleft < 0) {
w = screen.width;
wleft = 0;
}
if (wtop < 0) {
h = screen.height;
wtop = 0;
}
var win = window.open(url,
name,
'width=' + w + ', height=' + h + ', ' +
'left=' + wleft + ', top=' + wtop + ', ' +
'location=no, menubar=no, ' +
'status=no, toolbar=no, scrollbars=yes, resizable=no');
// Just in case width and height are ignored
win.resizeTo(w, h);
// Just in case left and top are ignored
win.moveTo(wleft, wtop);
win.focus();
}
// -->
</script>

<script>
<!--
function wopen2(url, name, w, h)
{
// Fudge factors for window decoration space.
// In my tests these work well on all platforms & browsers.
w += 32;
h += 96;
wleft = (screen.width - w) / 2;
wtop = (screen.height - h) / 2;
// IE5 and other old browsers might allow a window that is
// partially offscreen or wider than the screen. Fix that.
// (Newer browsers fix this for us, but let's be thorough.)
if (wleft < 0) {
w = screen.width;
wleft = 0;
}
if (wtop < 0) {
h = screen.height;
wtop = 0;
}
var win = window.open(url,
name,
'width=' + w + ', height=' + h + ', ' +
'left=' + wleft + ', top=' + wtop + ', ' +
'location=no, menubar=no, ' +
'status=no, toolbar=no, scrollbars=yes, resizable=no');
// Just in case width and height are ignored
win.resizeTo(w, h);
// Just in case left and top are ignored
win.moveTo(wleft, wtop);
win.focus();
}
// -->
</script>

<table class=maintable border=0><center><tr><th>.::Netdiscover Menu::.</th></tr><tr><td><br><ol>
<li><a href="./listhost.html" target="popup" onClick="wopen('./listhost.html', 'popup', 600, 450); return false;">Mostrar Resultados</a>
<li><a href="/cgi-bin/arping.cgi"target="popup" onClick="wopen2('/cgi-bin/arping.cgi', 'popup', 600, 450); return false;">Arping</a></li>
<li><a href="/cgi-bin/netdiscover.cgi">Cancelar</a></li>
</ol></td></tr></center></table>
CLEOF
fi
cl_footer2
exit

Editado pela última vez por pablino76 em Sex Abr 09, 2010 12:51 pm, em um total de 1 vez.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor AdslWiFi » Sex Abr 09, 2010 10:32 am

perfecto... esta noche intento hacer todo lo pendiente. Aqui iremos posteando adelantos.

Saludos...
Avatar do usuário
AdslWiFi
BFW Beneméritos
 
Mensagens: 2722
Registrado em: Dom Mar 15, 2009 9:25 pm
Localização: España - Madrid
BrazilFW Box:

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Sex Abr 09, 2010 2:32 pm

adsl recién modifique otra cosa pero hay algo que puntualmente creo que vale mucho la pena resolver y es el seguimiento del escaneo
y todavía no tengo bien claro si es muy difícil hacerlo sin tener que entrar y tocar el source de netdiscover que esta en C
estaría bueno poder evitar eso de andar recompilando el source específicamente solo para esta idea.
la parte que habría que rescatar para ser bien claro es esta parte que sale cuando se ejecuta por consola
precisamente el Currently scanning es dinamico y el dinamismo varia cuando se usa la opción -f osea FAST pega unos saltos largos.


Currently scanning: 192.168.1.0/16   |   Screen View: Unique Hosts

1 Captured ARP Req/Rep packets, from 1 hosts.    Total size:60
------------------------------------------------------------------------------------------------------
   IP             At MAC Address     Count    Len       MAC Vendor / Hostname
-------------------------------------------------------------------------------------------------------
192.168.0.2   dd:dd:dd:dd:dd       26        6            CHIFLE & CORNETA Corp.

extraer esa data ahi, seria el gol de arco a arco total creo.
Editado pela última vez por pablino76 em Sáb Abr 10, 2010 4:52 pm, em um total de 1 vez.
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Sex Abr 09, 2010 6:27 pm

este es el archivo modificado en el source de netdiscover-0_1.3-beta7 lo compile y funciona falta introducirlo a funcionar con el netdiscover.cgi.


screen.c
Código: Selecionar todos
/***************************************************************************
 *            screen.c
 *
 *  Tue Jul 12 03:23:41 2005
 *  Copyright  2005  Jaime Penalba Estebanez
 *  jpenalbae@gmail.com
 *
 *  Contributors:
 *   Parsable output by Guillaume Pratte <guillaume@guillaumepratte.net>
 ****************************************************************************/

/*
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
 
 /*
  *  Thanks to Christophe Devine, aircrack creator, who gave me the
  *  inspiration to make this screen interface. You can see his site
  *  here http://www.cr0.net:8040/code/network/
  */
 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <pthread.h>
#include <termios.h>
#include <unistd.h>
#include <sys/ioctl.h>

#include "screen.h"
#include "misc.h"
#include "ifaces.h"
#include "data_al.h"


/* Shity globals */
struct termios stored_settings, working_settings;
extern pthread_t screen, keys, sniffer, injection;


int scroll;
int smode, oldmode;
char line[300], tline[300];
char blank[] = " ";


/* Inits lists with null pointers, sighandlers, etc */
void init_screen()
{
   /* Interface properties */
   scroll = 0;
   smode = SMODE_HOST;

   /* Set interative mode options if no parsable mode */
   if(!parsable_output) {
      /* Set signal handlers */
      signal( SIGCONT, sighandler );
      signal( SIGINT, sighandler );
      signal( SIGKILL, sighandler );
      signal( SIGTERM, sighandler );
      signal( SIGHUP, sighandler );
      signal( SIGABRT, sighandler );

      /* Set console properties to read keys */
      tcgetattr(0,&stored_settings);
      working_settings = stored_settings;

      working_settings.c_lflag &= ~(ICANON|ECHO);
      working_settings.c_cc[VTIME] = 0;
      working_settings.c_cc[VMIN] = 1;
      tcsetattr(0,TCSANOW,&working_settings);
   }
}


/* Handle signals and set terminal */
void sighandler(int signum)
{
   if (parsable_output) {
      exit(0);
   } else {
      if (signum == SIGCONT) {
         tcsetattr(0,TCSANOW,&working_settings);
      } else {
         tcsetattr(0,TCSANOW,&stored_settings);

         signal(SIGINT, SIG_DFL);
         signal(SIGTERM, SIG_DFL);
         pthread_kill(keys, signum);

         exit(0);
      }
   }
}


/* Check scrolling limit */
int scroll_limit()
{
   const struct data_al *current_data_mode;

   /* Use corresponding data layer depending on current screen mode */
   current_data_mode = NULL;

   switch (smode) {
      case SMODE_REPLY:
         current_data_mode = &_data_reply;
         break;
      case SMODE_REQUEST:
         current_data_mode = &_data_request;
         break;
      case SMODE_HOST:
         current_data_mode = &_data_unique;
         break;
      case SMODE_HELP:
         current_data_mode = &_data_unique;
         break;
   }

   return current_data_mode->hosts_count() - scroll;
}


/* Read input keys */
void read_key()
{
   int ch, i;
   ch = getchar();

   /* Check for arrow keys */
   if ( ch == 27 && (ch = getchar()) == 91) {
      switch (getchar()) {
         case 66:
            ch = 106;
            break;
         case 65:
            ch = 107;
            break;
      }
   }

   switch (ch) {
      case 107:               // Scroll up
         if (scroll > 0)
            scroll--;
         break;
      case 106:               // Scroll down
         if (scroll_limit() > 1)
            scroll++;
         break;
      case ',':               // Scroll page up
         for (i = 0; i < win_sz.ws_row - 7; i++)
            if (scroll > 0)
                scroll--;
         break;
      case '.':               // Scroll page down
         for (i = 0; i < win_sz.ws_row - 7; i++)
            if (scroll_limit() > 1)
                scroll++;
         break;
      case 114:               // Show requests view
         smode = SMODE_REQUEST;
         scroll = 0;
         break;
      case 97:                // Show replies view
         smode = SMODE_REPLY;
         scroll = 0;
         break;
      case 117:               // Show unique hosts view
         smode = SMODE_HOST;
         scroll = 0;
         break;
      case 113:               // Quit
         if (smode == SMODE_HELP)
            smode = oldmode;
         else
            sighandler(0);
         break;
      case 104:               // Show help screen
         if (smode != SMODE_HELP) {
            oldmode = smode;
            smode = SMODE_HELP;
            scroll = 0;
         }
         break;
   }

    /* Debug code
    else
    {
        printf("\n\nYou pressed %i\n\n", ch);
        sleep(2);
    } */

   print_screen();
}


/* Clear and fill the screen */
void print_screen()
{
   /* Get Console Size */
   if (ioctl(0, TIOCGWINSZ, &win_sz) < 0) {
      win_sz.ws_row = 24;
      win_sz.ws_col = 80;
   }

   /* Flush and print screen */
   fprintf( stderr, "\33[1;1H" );
   pthread_mutex_lock(data_access);
   fill_screen();
   pthread_mutex_unlock(data_access);
   fprintf( stderr, "\33[J" );
   fflush(stdout);
}


/* Print header line containing scanning and current screen mode */
void print_status_header()
{
   int j;
   char *current_smode = NULL;

   switch (smode) {
      case SMODE_REPLY:
            current_smode = "ARP Reply";
         break;
      case SMODE_REQUEST:
            current_smode = "ARP Request";
         break;
      case SMODE_HOST:
            current_smode = "Unique Hosts";
         break;
      case SMODE_HELP:
            current_smode = "Help";
         break;
   }

   sprintf(line, " Currently scanning: %s   |   Screen View: %s",
           current_network, current_smode);
           
   printf("%s", line);
   FILE *archivo;
   if(!(archivo=fopen("scaning", "w"))) return -1;
   fprintf(archivo, "%s");
   fclose(archivo);


   /* Fill with spaces */
   for (j=strlen(line); j<win_sz.ws_col - 1; j++)
         printf(" ");
   printf("\n");

    /* Print blank line with spaces */
    for (j=0; j<win_sz.ws_col - 1; j++)
         printf(" ");
    printf("\n");
}


/* Fills the screen using white spaces to avoid refresh problems  *
 * not a very smart way, but it works :)                          */
void fill_screen()
{
   const struct data_al *current_data_mode;

   /* Use corresponding data layer depending on current screen mode */
   current_data_mode = NULL;

   switch (smode) {
      case SMODE_REPLY:
            current_data_mode = &_data_reply;
         break;
      case SMODE_REQUEST:
            current_data_mode = &_data_request;
         break;
      case SMODE_HOST:
            current_data_mode = &_data_unique;
         break;
      case SMODE_HELP:
            current_data_mode = &_data_unique;
         break;
   }

   /* Print headers */
   print_status_header();
   current_data_mode->print_header(win_sz.ws_col);

   /* Print screen main data */
   if (smode != SMODE_HELP) {

      int x = 0;

      current_data_mode->beginning_registry();
      while (current_data_mode->current_registry() != NULL) {

         if (x >= scroll)
            current_data_mode->print_line();

         current_data_mode->next_registry();
         x++;

         /* Check if end of screen was reached */
         if (x >= ( (win_sz.ws_row + scroll) - 7))
            break;
      }

   } else if(smode == SMODE_HELP) {
      int i;

      printf("\t  ______________________________________________  \n"
             "\t |                                              | \n"
             "\t |    \33[1mUsage Keys\33[0m                                | \n"
             "\t |     h: show this help screen                 | \n"
             "\t |     j: scroll down (or down arrow)           | \n"
             "\t |     k: scroll up   (or up arrow)             | \n"
        "\t |     .: scroll page up                        | \n"
        "\t |     ,: scroll page down                      | \n"
             "\t |     q: exit this screen or end               | \n"
             "\t |                                              | \n"
             "\t |    \33[1mScreen views\33[0m                              | \n"
             "\t |     a: show arp replys list                  | \n"
             "\t |     r: show arp requests list                | \n"
             "\t |     u: show unique hosts detected            | \n"
             "\t |                                              | \n"
             "\t  ----------------------------------------------  \n");



       for (i=25; i<win_sz.ws_row; i++)
           printf("\n");
   }
}




este es el fragmento de codigo modificado.

sprintf(line, " Currently scanning: %s | Screen View: %s",
current_network, current_smode);

printf("%s", line);
FILE *archivo;
if(!(archivo=fopen("scaning", "w"))) return -1;
fprintf(archivo, "%s");
fclose(archivo);



estos son los archivos que uso para compilar

http://rayo969.sslpowered.com/netdiscover-0_1.3-beta7-svn.tar.gz

libnet download:
http://sourceforge.net/projects/libnet-dev/


libreria /lib/
http://rayo969.sslpowered.com/libnet.so.1
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Sáb Abr 10, 2010 1:31 am

main.c modificado 110410:2029
Código: Selecionar todos
/***************************************************************************
*            main.c
*
*  Sun Jul  3 07:35:24 2005
*  Copyright  2005  Jaime Penalba Estebanez
*  jpenalbae@gmail.com
*
*  Contributors:
*   Parsable output by Guillaume Pratte <guillaume@guillaumepratte.net>
****************************************************************************/

/*
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 3 of the License, or
*  (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#define _GNU_SOURCE
#define VERSION "0.3-beta7"

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
#include <string.h>

#include "ifaces.h"
#include "screen.h"
#include "fhandle.h"
#include "misc.h"

#define RPATH  "%s/.netdiscover/ranges"
#define FPATH  "%s/.netdiscover/fastips"


extern void parseable_scan_end();
void *inject_arp(void *arg);
void *screen_refresh(void *arg);
void *parsable_screen_refresh(void *arg);
void scan_range(char *disp, char *sip);
void usage();


/* Last octect of ips scaned in fast mode */
/* Add new addr if needed here */
char **fast_ips;
char *dfast_ips[] = { "1", "2", "100", "200", "254", NULL};

/* Common local networks to scan */
/* Add new networks if needed here */
char **common_net;
char *dcommon_net[] = {
   "192.168.0.0/16",
   "172.16.0.0/16",
   "172.26.0.0/16",
   "172.27.0.0/16",
   "172.17.0.0/16",
   "172.18.0.0/16",
   "172.19.0.0/16",
   "172.20.0.0/16",
   "172.21.0.0/16",
   "172.22.0.0/16",
   "172.23.0.0/16",
   "172.24.0.0/16",
   "172.25.0.0/16",
   "172.28.0.0/16",
   "172.29.0.0/16",
   "172.30.0.0/16",
   "172.31.0.0/16",
   "10.0.0.0/8",
   NULL
};


pthread_t injection, sniffer, screen, keys;

/* Command line flags */
int flag_fast_mode;
int flag_repeat_scan;
int flag_network_octect;
int flag_supress_sleep;
int flag_ignore_files;
int flag_auto_scan;
long flag_sleep_time;


/* Read control keys */
void *keys_thread(void *arg)
{
   while ( 1 == 1 )
      read_key();
}


/* main, fetch params and start */
int main(int argc, char **argv)
{
   int c;
   int flag_passive_mode = 0;
   int flag_scan_range = 0;
   int flag_scan_list = 0;
   int no_parsable_header = 0;
   char *plist = NULL;
   char *mlist = NULL;

   /* Config file handling vars */
   char *home, *path;

   struct t_data datos;

   /* Some default values for the program options.  */
   datos.source_ip = NULL;
   datos.interface = NULL;
   datos.pcap_filter = NULL;
   flag_sleep_time = 99;
   flag_network_octect = 67;
   flag_repeat_scan = 1;
   flag_auto_scan = 0;

   /* Globals defined in screen.h */
   parsable_output = 0;
   continue_listening = 0;

   current_network = (char *) malloc ((sizeof(char)) * 19);
   sprintf(current_network, "Starting.");

   /* Fetch parameters */
   while ((c = getopt(argc, argv, "i:s:r:l:m:n:c:F:pSfdPNLh")) != EOF)
   {
      switch (c)
      {
         case 'i':   /* Set the interface */
            datos.interface = (char *) malloc (sizeof(char) * (strlen(optarg) + 1));
            sprintf(datos.interface, "%s", optarg);
            break;

         case 'p':   /* Enable passive mode */
            flag_passive_mode = 1;
            break;

         case  's':  /* Set sleep time */
            flag_sleep_time = atol(optarg);
            break;

         case  'S':  /* Enable sleep supression */
            flag_supress_sleep = 1;
            break;

         case  'c':  /* Set no. of times to repeat the scan */
            flag_repeat_scan = atoi(optarg);
            break;

         case  'n':  /* Set las used octect */
            flag_network_octect = atoi(optarg);
            break;

         case  'r':  /* Set the range to scan */
            datos.source_ip = (char *) malloc (sizeof(char) * strlen(optarg) + 1);
            sprintf(datos.source_ip, "%s", optarg);
            flag_scan_range = 1;
            break;

         case 'l':   /* Scan ranges on the given file */
            plist = (char *) malloc (sizeof(char) * (strlen(optarg) + 1));
            sprintf(plist, "%s", optarg);
            flag_scan_list = 1;
            break;

         case 'm':   /* Scan MACs on the given file */
            mlist = (char *) malloc (sizeof(char) * (strlen(optarg) + 1));
            sprintf(mlist, "%s", optarg);
            break;

         case  'f':  /* Enable fast mode */
            flag_fast_mode = 1;
            break;

         case 'F':  /* Edit pcap filter */
            datos.pcap_filter = (char *) malloc (sizeof(char) * (strlen(optarg) + 1));
            sprintf(datos.pcap_filter, "%s", optarg);
            break;

         case 'd':   /* Ignore home config files */
            flag_ignore_files = 1;
            break;

         case 'P':   /* Produces parsable output (vs interactive screen) */
            parsable_output = 1;
            break;

         case 'N':   /* Do not print header under parsable mode */
            no_parsable_header = 1;
            break;

         case 'L':   /* Continue to listen in parsable output mode after active scan is completed */
            parsable_output = 1;
            continue_listening = 1;
            break;

    default:
       printf("\n"); /* continues... */

         case 'h':   /* Show help */
            usage(argv[0]);
            exit(1);
            break;
      }
   }

   if (optind < argc) {
      printf("Invalid extra argument: %s\n\n", argv[optind]);
      usage(argv[0]);
      exit(1);
   }


   /* Check for uid 0 */
   if ( getuid() && geteuid() )
   {
      printf("You must be root to run this.\n");
      exit(1);
   }

   /* If no iface was specified, autoselect one. exit, if no one available */
   if (datos.interface == NULL)
   {
      datos.interface = pcap_lookupdev(errbuf);

      if (datos.interface == NULL)
      {
         printf("Couldn't find default device: %s\n", errbuf);
         exit(1);
      }
   }

   /* Load user config files or set defaults */
   home = getenv("HOME");

   /* Read user configured ranges if arent disabled */
   path = (char *) malloc (sizeof(char) * (strlen(home) + strlen(RPATH) + 1));
   sprintf(path, RPATH, home);

   if (((common_net = fread_list(path)) == NULL) || (flag_ignore_files == 1))
      common_net = dcommon_net;
   free(path);

   /* Read user configured ips for fast mode if arent disabled */
   path = (char *) malloc (sizeof(char) * (strlen(home) + strlen(FPATH) + 1));
   sprintf(path, FPATH, home);

   if(((fast_ips = fread_list(path)) == NULL) || (flag_ignore_files == 1))
      fast_ips = dfast_ips;
   free(path);

   /* Read range list given by user if specified */
   if (flag_scan_list == 1) {
      if ((common_net = fread_list(plist)) == NULL) {
         printf("File \"%s\" containing ranges, cannot be read.\n", plist);
         exit(1);
      }
   }

   /* Read Mac list of known hosts */
   if (mlist != NULL) {
      if (load_known_mac_table(mlist) < 0) {
         printf("File \"%s\" containing MACs and host names, cannot be read.\n", mlist);
         exit(1);
      }
   }

   /* Init libnet, data layers and screen */
   lnet_init(datos.interface);
   _data_reply.init();
   _data_request.init();
   _data_unique.init();
   init_screen();

   /* Init mutex */
   data_access = (pthread_mutex_t *)malloc(sizeof (pthread_mutex_t));
   pthread_mutex_init(data_access, NULL);

   /* If no mode was selected, enable auto scan */
   if ((flag_scan_range != 1) && (flag_passive_mode != 1))
      flag_auto_scan = 1;

   /* Start the execution */
   if (parsable_output) {

      if (!no_parsable_header)
         _data_unique.print_simple_header();

   } else {
      system("clear");
      pthread_create(&screen, NULL, screen_refresh, (void *)NULL);
      pthread_create(&keys, NULL, keys_thread, (void *)NULL);
   }

   pthread_create(&sniffer, NULL, start_sniffer, (void *)&datos);

   if (flag_passive_mode == 1) {
      current_network = "(passive)";
      pthread_join(sniffer,NULL);

   } else {
      if (pthread_create(&injection, NULL, inject_arp, (void *)&datos))
         perror("Could not create injection thread");

      pthread_join(sniffer,NULL);
   }

   if(datos.pcap_filter != NULL)
      free(datos.pcap_filter);

   return 0;
}


/* Refresh screen function called by screen thread */
void *screen_refresh(void *arg)
{
    while (1==1) {
        print_screen();
        sleep(1);
    }
}


/* Start the arp injection on the given network device */
void *inject_arp(void *arg)
{
   struct t_data *datos;

   datos = (struct t_data *)arg;
   sleep(2);

   /* Scan the given range, or start the auto scan mode */
   if ( flag_auto_scan != 1 ) {
      scan_range(datos->interface, datos->source_ip);

   } else {
      int x = 0;

      while (common_net[x] != NULL) {
         scan_range(datos->interface, common_net[x]);
         x++;
      }
   }

   /* Wait for last arp replys and mark as scan finished */
   sleep(2);
   sprintf(current_network, "Finished!");
   lnet_destroy();

   /* If parseable output is enabled, print end and exit */
   if(parsable_output)
      parseable_scan_end();

   return NULL;
}


/* Scan 255 hosts network */
void scan_net(char *disp, char *sip)
{
   int x, j;
   char test[16], fromip[16];

   sprintf(fromip,"%s.%i", sip, flag_network_octect);

   /* Repeat given times */
   for (x=0; x<flag_repeat_scan; x++)
   {

      /* Check if fastmode is enabled */
      if (flag_fast_mode != 1)
      {
         for (j=1; j<255; j++)
         {
            sprintf(test,"%s.%i", sip, j);
            forge_arp(fromip, test, disp);

            /* Check sleep time supression */
            if (flag_supress_sleep != 1)
            {
               /* Sleep time */
               if (flag_sleep_time != 99)
                  usleep(flag_sleep_time * 1000);
               else
                  usleep(1 * 1000);
            }
         }
      }
      else
      {
         j = 0;

         while (fast_ips[j] != NULL)
         {
            sprintf(test,"%s.%s", sip, fast_ips[j]);
            forge_arp(fromip, test, disp);
            j++;

            /* Check sleep time supression */
            if (flag_supress_sleep != 1)
            {
               /* Sleep time */
               if (flag_sleep_time != 99)
                  usleep(flag_sleep_time * 1000);
               else
                  usleep(1 * 1000);
            }
         }
      }

      /* If sleep supression is enabled, sleep each 255 hosts */
      if (flag_supress_sleep == 1)
      {
         /* Sleep time */
         if (flag_sleep_time != 99)
            usleep(flag_sleep_time * 1000);
         else
            usleep(1 * 1000);
      }

   }
}


/* Scan range, using arp requests */
void scan_range(char *disp, char *sip)
{
   int i, k, e;
   const char delimiters[] = ".,/";
   char *a, *b, *c, *d, *aux;
   char tnet[19], net[16];

   /* Split range data*/
   snprintf(tnet, sizeof(tnet), "%s", sip);
   a = strtok (tnet, delimiters); /* 1st ip octect */
   b = strtok (NULL, delimiters); /* 2nd ip octect */
   c = strtok (NULL, delimiters); /* 3rd ip octect */
   d = strtok (NULL, delimiters); /* 4th ip octect */

   if ((aux = strtok (NULL, delimiters)) != NULL) /* Subnet mask */
      e = atoi(aux); /* Subnet mask */
   else
      e = 24; /* Default subnet mask */

   /* Check all parts are ok */
   if ((a == NULL) || (b == NULL) || (c == NULL) || (d == NULL))
   {
      e = -1;
   } else {
        k = strtol(a, &aux, 10);
        if (k<0 || k>255 || *aux != '\0') e = -1;
        k = strtol(b, &aux, 10);
        if (k<0 || k>255 || *aux != '\0') e = -1;
        k = strtol(c, &aux, 10);
        if (k<0 || k>255 || *aux != '\0') e = -1;
        k = strtol(d, &aux, 10);
        if (k<0 || k>255 || *aux != '\0') e = -1;
   }

   /* Scan class C network */
   if ( e == 24)
   {
      sprintf(net, "%s.%s.%s", a, b, c);
      sprintf(current_network,"%s.0/%i", net, e);
      scan_net(disp, net);
      FILE *archivo;
      if(!(archivo=fopen("/var/http/htdocs/cgi-bin/scaning", "w"))) return -1;   
      fprintf(archivo, "%s.0/%i", net, e);
      fclose(archivo);
   }/* Scan class B network */
   else if ( e == 16)
   {
      for (i=0; i<256; i++)
      {
         sprintf(net, "%s.%s.%i", a, b, i);
         sprintf(current_network,"%s.%s.%i.0/%i", a, b, i, e);
         scan_net(disp, net);
         FILE *archivo;
         if(!(archivo=fopen("/var/http/htdocs/cgi-bin/scaning", "w"))) return -1;   
         fprintf(archivo, "%s.%s.%i.0/%i", a, b, i, e);
         fclose(archivo);
      }

   } /* Scan class A network */
   else if ( e == 8)
   {
      for (k=0; k<256; k++)
      {
         for (i=0; i<256; i++)
         {
            sprintf(net, "%s.%i.%i", a, k, i);
            sprintf(current_network,"%s.%i.%i.0/%i", a, k, i, e);
            scan_net(disp, net);
            FILE *archivo;
            if(!(archivo=fopen("/var/http/htdocs/cgi-bin/scaning", "w"))) return -1;   
            fprintf(archivo, "%s.%i.%i.0/%i", a, k, i, e);
            fclose(archivo);
         }
      }
   }
   else
   {
      // system("clear");
      printf("\nERROR: Network range must be 0.0.0.0/8 , /16 or /24\n\n");
      sighandler(SIGTERM);
      sleep(5);
      exit(1);
   }

}


/* Print usage instructions */
void usage(char *comando)
{
   printf("Netdiscover %s [Active/passive arp reconnaissance tool]\n"
      "Written by: Jaime Penalba <jpenalbae@gmail.com>\n\n"
      "Usage: %s [-i device] [-r range | -l file | -p] [-m file] [-s time] [-n node] "
      "[-c count] [-f] [-d] [-S] [-P] [-c]\n"
      "  -i device: your network device\n"
      "  -r range: scan a given range instead of auto scan. 192.168.6.0/24,/16,/8\n"
      "  -l file: scan the list of ranges contained into the given file\n"
      "  -p passive mode: do not send anything, only sniff\n"
      "  -m file: scan the list of known MACs and host names\n"
      "  -F filter: Customize pcap filter expression (default: \"arp\")\n"
      "  -s time: time to sleep between each arp request (miliseconds)\n"
      "  -n node: last ip octet used for scanning (from 2 to 253)\n"
      "  -c count: number of times to send each arp reques (for nets with packet loss)\n"
      "  -f enable fastmode scan, saves a lot of time, recommended for auto\n"
      "  -d ignore home config files for autoscan and fast mode\n"
      "  -S enable sleep time supression betwen each request (hardcore mode)\n"
      "  -P print results in a format suitable for parsing by another program\n"
      "  -N Do not print header. Only valid when -P is enabled.\n"
      "  -L in parsable output mode (-P), continue listening after the active scan is completed\n\n"
      "If -r, -l or -p are not enabled, netdiscover will scan for common lan addresses.\n",
      VERSION, comando);
}




netdiscover.cgi rev120410-2249
Código: Selecionar todos
#!/bin/sh

. /var/http/web-functions

cl_header2 "Netdiscover - BrazilFW"


sed -i '/runfile/d' /var/spool/cron/crontabs/root > /dev/null 2>&1
killall netdiscover > /dev/null 2>&1
rm /var/http/htdocs/cgi-bin/listhost.html > /dev/null 2>&1
echo "<h1><blink>Cancelado</blink></h1>" >/var/http/htdocs/cgi-bin/listhost.html
echo "Iniciando..." >/var/http/htdocs/cgi-bin/scaning

if [ -n "$FORM_COMMAND" ] ; then
  COMMAND=$FORM_COMMAND
 
  if [ -n "$FORM_PARAMNAME" ] ; then
    echo "<center><form method=POST action=/cgi-bin/netdiscover.cgi>"
    echo "$FORM_PARAMNAME"
    echo " : "
    echo "<input type=text size=30 name=PARAM value=\"$FORM_PARAM\">  "
    echo "<input type=submit value= $Feo >"
    echo "<input type=hidden name=COMMAND value=\"$FORM_COMMAND\">"
    echo "<input type=hidden name=PARAMNAME value=\"$FORM_PARAMNAME\"></form></center>"
   
    COMMAND=`echo $COMMAND | sed s/MARK_param_MARK/$FORM_PARAM/`
 fi
  echo "<pre>"
  if [ -n "$FORM_PARAM" -o -z "$FORM_PARAMNAME" ] ; then
    $COMMAND
  fi
  echo "</pre></td></tr></table>"
else

if ! [ "$FORM_OKBTN" = "$Fsb" ]; then

cat << CLEOF
<script>
function validar(ip) {
partes=ip.split('.');
if (partes.length!=4) {
 alert("ip no valida");
  return false;
           
}
for (i=0;i<4;i++) {
num=partes[i];
if (num>255 || num<0 || num.length==0 || isNaN(num)){

 alert("ip no valida");
  return false;
}
}

}
</script>

       

<form method="POST" action="/cgi-bin/netdiscover.cgi">
<table border=0 width="60%" class=maintable>
<tr><th colspan=2>Netdiscover CGI</th></tr>
<tr><td width=50% class=row1 align=right><b>Interface</b></td><td width="50%" class=row2><input type=text name=IF_LOCAL value="${IF_LOCAL}" size=5></td></tr>
<tr><td width=50% class=row1 align=right><b>IP</b></td><td width="50%" class=row2><input type=text name=IPADDRESS size=25 maxlength="15" value="${LOCAL_IPADDR}"></td></tr>
<tr><td width=50% class=row1 align=right><b>Mascara Subred</b></td><td width="50%" class=row2>
<INPUT type="radio" name=SUBRED value="24" checked>24
<INPUT type="radio" name=SUBRED value="16">16
<INPUT type="radio" name=SUBRED value="8">8</td></tr>
<tr><td width=50% class=row1 align=right><b>Modos</b>
<br><i><b>*Modo Acelerado</b> Recomendado solo para detectar router's gateway's o AP's intermedios</i><br><b><i>*Modo espera</b> para redes con baja calidad de enclace</i></td><td width="50%" class=row2>
<INPUT type="radio" name=MODOSCAN value=' ' checked>Estandar<BR>
<INPUT type="radio" name=MODOSCAN value='-f'>Modo Acelerado*<BR>
<INPUT type="radio" name=MODOSCAN value='-s 10'>Esperar 10 segundos*<BR>
<INPUT type="radio" name=MODOSCAN value='-s 50'>Esperar 50 segundos</td></tr>

    <td width=50% class=row1 align=right><br><i><b>Rango de redes seleccionadas</b>
    <br>netdiscover pasa a leer desde un archivo<br>
    las redes que usted desea buscar
    Estas deben ser ingresadas en orden descendente dentro del campo de texto derecho</i><br><i>Ejemplos:</i>
    <br><b><i>192.168.0.0/24<br>10.0.0.0/16</i></b><br>
    como se ve arriba en el ejemplo este debe cumplimentar con la notacion de la amplitud de rango subred a escanear <i>ejemplos:</i>
    <b><i> /24 o /16 u /8</b><i><br><b>Busquedad Anterior<b><br><textarea rows=7 cols="20" name="BUSQUEDA_ANTERIOR" wrap="off">`cat /var/http/htdocs/cgi-bin/redes.select`</textarea></td><br>
   
       
    <td width="25%" >
    <textarea rows=20 cols="20" name="RANGO_FILE" wrap="off">
        </textarea>
    </td>

   

</table>
<input type=submit value="$Fsb" name=OKBTN onClick="validar(document.all.IPADDRESS.value);"><input type=reset value="$Fer">

<!--tabla de informacion
<td width="50%">
<table border=0 class=maintable>
<tr>
<tr><th colspan=2>Otras Opciones</th></tr>
<td id=textoexterno>
<object type="text/plain"data="scaning"></object>
</td>
</tr>
</table>
fin de las tablas de informacion-->


</P>
</FORM>
CLEOF
cl_footer2
exit
fi



#configuracion o archivo

if [ "$FORM_RANGO_FILE" = "" ]; then

echo "#!/bin/sh" >./netdiscover.sh
echo "echo '<body bgcolor=#E5E5E5><meta http-equiv=REFRESH CONTENT=3;URL=./listhost.html><Font size=2>Buscando:<object type='text/html' color=#FFBE0F data=scaning width=120 height=30></object> Netdiscover-CGI<Blink> Monitor</blink></FONT></p></div><pre>'>/var/http/htdocs/cgi-bin/listhost.html" >>./netdiscover.sh
echo "/usr/local/sbin/netdiscover -L -i $FORM_IF_LOCAL -r $FORM_IPADDRESS/$FORM_SUBRED $FORM_MODOSCAN >>/var/http/htdocs/cgi-bin/listhost.html &" >>./netdiscover.sh
sleep 1
./netdiscover.sh &
echo "<b>Netdiscover Basico </b>"

            else
           
echo "$FORM_RANGO_FILE" >./redes.select
echo "#!/bin/sh" >./netdiscover.sh
echo "echo '<body bgcolor=#E5E5E5><meta http-equiv=REFRESH CONTENT=3;URL=./listhost.html><Font size=2>Scan:<object type='text/html' color=#FFBE0F data=scaning width=120 height=30></object> Netdiscover-CGI<Blink> Monitor</blink></FONT></p></div><pre>'>/var/http/htdocs/cgi-bin/listhost.html" >>./netdiscover.sh
echo "/usr/local/sbin/netdiscover -L -i $FORM_IF_LOCAL -l /var/http/htdocs/cgi-bin/redes.select $FORM_MODOSCAN >>/var/http/htdocs/cgi-bin/listhost.html &" >>./netdiscover.sh
/bin/runfile
echo "<b>Netdiscover desde Archivo</b>"

fi


/bin/chmod +x ./netdiscover.sh

sleep 1
MINUTOS=`uptime |cut -d":" -f2`

if [ $MINUTOS ]
then
  case "$MINUTOS" in
    01)
      MINUTOS=1
      ;;

    02)
      MINUTOS=2
      ;;

    03)
      MINUTOS=3
      ;;

    04)
      MINUTOS=4
      ;;

     05)
      MINUTOS=5
      ;;
    
     06)
      MINUTOS=6
      ;;
    
     07)
      MINUTOS=7
      ;;
    
     08)
      MINUTOS=8
      ;;
    
     09)
      MINUTOS=9
      ;;
    
     00)
      MINUTOS=1
      ;;
    
    
   
     
  esac
fi

let SUMA=$MINUTOS+1
HORA=`uptime |cut -d":" -f1`
echo "$SUMA $HORA * * * runfile ">>/var/spool/cron/crontabs/root
sleep 1
/usr/bin/crontab /var/spool/cron/crontabs/root



cat << CLEOF
<script>
<!--
function wopen(url, name, w, h)
{
// Fudge factors for window decoration space.
// In my tests these work well on all platforms & browsers.
w += 32;
h += 96;
wleft = (screen.width - w) / 2;
wtop = (screen.height - h) / 2;
// IE5 and other old browsers might allow a window that is
// partially offscreen or wider than the screen. Fix that.
// (Newer browsers fix this for us, but let's be thorough.)
if (wleft < 0) {
w = screen.width;
wleft = 0;
}
if (wtop < 0) {
h = screen.height;
wtop = 0;
}
var win = window.open(url,
name,
'width=' + w + ', height=' + h + ', ' +
'left=' + wleft + ', top=' + wtop + ', ' +
'location=no, menubar=no, ' +
'status=no, toolbar=no, scrollbars=yes, resizable=no');
// Just in case width and height are ignored
win.resizeTo(w, h);
// Just in case left and top are ignored
win.moveTo(wleft, wtop);
win.focus();
}
// -->
</script>

<script>
<!--
function wopen2(url, name, w, h)
{
// Fudge factors for window decoration space.
// In my tests these work well on all platforms & browsers.
w += 32;
h += 96;
wleft = (screen.width - w) / 2;
wtop = (screen.height - h) / 2;
// IE5 and other old browsers might allow a window that is
// partially offscreen or wider than the screen. Fix that.
// (Newer browsers fix this for us, but let's be thorough.)
if (wleft < 0) {
w = screen.width;
wleft = 0;
}
if (wtop < 0) {
h = screen.height;
wtop = 0;
}
var win = window.open(url,
name,
'width=' + w + ', height=' + h + ', ' +
'left=' + wleft + ', top=' + wtop + ', ' +
'location=no, menubar=no, ' +
'status=no, toolbar=no, scrollbars=yes, resizable=no');
// Just in case width and height are ignored
win.resizeTo(w, h);
// Just in case left and top are ignored
win.moveTo(wleft, wtop);
win.focus();
}
// -->
</script>

<table class=maintable border=0><center><tr><th>.::Netdiscover Menu::.</th></tr><tr><td><br><ol>
<li><a href="./listhost.html" target="popup" onClick="wopen('./listhost.html', 'popup', 620, 450); return false;">Mostrar Resultados</a>
<li><a href="/cgi-bin/arping.cgi"target="popup" onClick="wopen2('/cgi-bin/arping.cgi', 'popup', 600, 450); return false;">Arping</a></li>
<li><a href="/cgi-bin/netdiscover.cgi">Cancelar</a></li>
</ol></td></tr></center></table>
CLEOF
fi
cl_footer2
exit




solucionados y faltantes

1)el main.c extrae el Currently scanning a un archivo de texto llamado scaning perfecto. (solucionado)
2)Currently scanning en footer. (solucionado)
3)lectura archivo file_redes opcion netdiscover -L -l file_redes. (solucionado)
4)ejecucion netdiscover.sh tras submit. (falta)
pablino76
 

Re: PROBLEMA ejecutar comando de linux desde un CGI

Mensagempor pablino76 » Sex Abr 23, 2010 8:31 pm

hola sigo pero ando re re re con poco tiempo

solo dejo una duda no entiendo porque este script


Código: Selecionar todos
import os;
myPipe=os.popen2("run-netdiscover","a");
print(myPipe[1].read());


run-netdiscover esta en /bin
este era el que antes llamaba runfile

y Claro antes instale python en brazilfw
poniéndo esa porción de script py dentro del netdiscover.cgi tampoco va o hay algo que puede ser asi pero no lo estoy armando bien
por un momento pensé que podía haber sido y cuando volvio a fallar me pareció extraño y mal.

¿sirve de pista?
pablino76
 

Próximo

Voltar para Otro Tema (Foro Off Topics)

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes

cron