Uma URL do Apex termina sempre com algo assim:
/f?p=10702:1:2602444723283688:::::
O único parâmetro p recebe todos os dados separados por ponto-e-vírgula. O primeiro número é o número da aplicação, o segundo é o número da página e o terceiro é o número da sessão.
Nos logs do Apache, encontrei o seguinte:
180.76.5.93 - - [31/Jul/2013:00:00:21 -0300] "GET /aplicprod/f?p=10702:1:2602444723283688::::: HTTP/1.1" 302 -
E a minha missão era a de descobrir quais IPs iniciaram maior número de sessões distintas. A solução é trivial:
perl -ne 'print "$1 $2\n" if /^(\S+).+p=\d+:\d+:(\d{2,})/' access_log \
| sort | uniq | grep -Po "(\d+\.){3}\d+" | uniq -c | sort -nr
O primeiro passo é extrair o IP e o número da sessão e colocá-los lado-a-lado assim:
180.76.5.93 2602444723283688
Isso resolvemos com o Perl. Depois, ordeno todas as linhas e elimino as repetições (que são linhas com o mesmo IP e mesmo número de sessão). Nesse ponto, cada IP aparece tantas vezes quantas sessões distintas tiver abertas para si. Então, retiro o IP de cada linha (com o grep) e conto as ocorrências com os dois últimos comandos (uniq -c | sort -nr).
A conclusão é que o Perl facilita muito a estrepolias com a linha-de-comando e que há uns engraçadinhos nos Estêites e na China que gostam de iniciar sessões do Apex.