Archivo de la etiqueta: grep

Captura de cabeceras HTTP en tiempo real

[spanish]Algunas personas me llaman friki por hacer cosas como esta, analizar una captura de tcpdump con strings y grep:[/spanish]

[english]Some people call me a freak because of doing things like this, analyzing a tcpdump capture with strings and grep:[/english]


tcpdump -i any -p -s 0 -w - "port 80" | strings | grep -E "^(GET|POST|HEAD|[a-zA-Z-]+:) "

:-D

cut | sort | uniq: Apache logs

[spanish]

Muchas veces cuando un servidor web va lento es posible que esté ante un «ataque», intencionado o no, por parte de algún bot. He visto casos en los que el propio Google Bot o bots de universidades u otros indexadores generaban más de la mitad del tráfico de un sitio web. Estos casos no son un ataque DoS como tal, sería tráfico legítimo, pero el resultado es que nos «tumban» el servicio. En algunos casos como con Google se puede configurar con las Webmaster Tools y los ficheros sitemaps y/o robots.txt la frecuencia de las visitas y a qué páginas acceder, en otros no y tendremos que valorar filtrar ese tráfico a nivel de firewall. Pero en cualquier caso el primer paso es detectar que realmente hay una IP (o un grupo de IPs) que nos está «machacando» y con whois averiguar quién es.

Para ver las cinco IPs con más accesos en el Apache podemos ejecutar algo así:

[/spanish]
[english]

Many times the reason because a web server is slow and unresponsive is that it’s under «attack», on purpose or not, by a bot. I’ve seen cases where Google Bot, bots from research engines from universities or some other kind of indexer were responsible for more than half the traffic of a site. These cases are not real DoS attacks, this traffic can be considered legitimate, but the result is that it brings the service down. You can instruct some of these bots not to visit your site so often, like Google Bot using the Google Webmaster Tools and the sitemaps and/or robots.txt files, but usually you can’t and have to consider filtering all this traffic at the firewall. But in any case, the first step is realizing that a single IP (or a couple of them) is responsible for most of your traffic, identifying this IP and using whois learn who it belongs to.

You can run something like this to list the top five IP addresses on your Apache’s access.log:

[/english]



cut -d" " -f 1 access.log | sort | uniq -c | sort -nr | head -n 5

pkill

[spanish]

Este comando casi me avergüenza admitir que lo descubrí hace pocos meses. :-)

Todos conocéis el comando kill, y casi seguro que también killall (como kill pero por nombre en lugar de PID). El problema de killall es que sólo señala a los procesos con exactamente ese nombre, y a veces lo que queremos es actuar sobre una serie de procesos que empiezan con los mismos caracteres, o tienen una palabra común en la ruta, etc. Con pkill se puede:



pkill -9 -f foo

Como nota curiosa, hasta ahora cuando yo quería hacer ésto lo que ejecutaba era:

[/spanish]

[english]

I’m almost ashamed to admit I didn’t knew of this command until very recently. :-)

Everybody knows the kill command, and almost everybody knows  killall too (like kill using the process’ name instead of its  PID). The problem with killall is that it only signals the processes matching the exact name you specify, and sometimes you want to work over a series of related processes that begin with the same word, or have a given word on their command line. pkill does just that:



pkill -9 -f foo

As a side note, what I used before when I wanted to do this was:

[/english]


kill $SIGNAL $(ps aux | grep $PROG | awk '{print $2}')