Tcpdump

Para quem não conhece, tcpdump é um analisador de tráfego de rede. Por “escutar” o que passa pela placa de rede, você precisa executá-lo com usuário root.
O objetivo não é estender muito sobre ele, mas apenas descrever algumas informações importantes.
Primeiramente vamos rever os tipos de possíveis flags nos pacotes de rede com a sigla que aparece na análise:
S (SYN), F (FIN), P (PUSH), R (RST), W (ECN CWR), E (ECN-Echo)
Caso nenhum flag esteja definido, apenas um ponto ‘.’ aparece, exemplo: “Flags [.]”.
Ao executar o comando tcpdump sem argumentos, uma captura é iniciada sem filtros utilizando a placa de rede primária. Exemplo especificando outra placa de rede:

tcpdump -i lo

Além de visualizar os resultados na tela, também é possível salvá-lo em um arquivo para futura análise:

tcpdump -w /tmp/dump

Para abrir o arquivo salvo:

tcpdump -r /tmp/dump

Um argumento interessante a utilizar é o “-A” que tenta abrir os pacotes para exibir o conteúdo, exemplo:

$ tcpdump -A host 10.0.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
14:48:11.162477 IP server1.corp.33951 > server2.corp.wap-wsp: Flags [P.], seq 1:189, ack 1, win 115, options [nop,nop,TS val 2116848677 ecr 826203350], length 188
E.....@.@..)
...
.....#...r.1w.....sQ......
~,.%1>..GET /_search?pf.nome=diego HTTP/1.1
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Host: server2:9200
Accept: */*

Outros argumentos interessantes:
-nn: numérico (não resolve nome de host ou porta)
-vv: verboso (mais informações)
-XX: exibe o conteúdo em hexadecimal e ASCII
Filtros interessantes:
host (servidor de origem ou destino)
tcp port
Exemplo:

$ tcpdump -nnvvXX host 10.0.0.1 and tcp port 9200
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
14:56:51.724354 IP (tos 0x0, ttl 64, id 50362, offset 0, flags [DF], proto TCP (6), length 422)
    10.0.0.2.33954 > 10.0.0.1.9200: Flags [P.], cksum 0x5163 (correct), seq 1:371, ack 1, win 115, options [nop,nop,TS val 2117369239 ecr 826723912], length 370
        0x0000:  0050 56b3 1263 0050 56b3 8ab4 0800 4500  .PV..c.PV.....E.
        0x0010:  01a6 c4ba 4000 4006 244c 0a14 1e11 0a14  ....@.@.$L......
        0x0020:  1e13 84a2 23f0 6ab5 b930 8d28 46fe 8018  ....#.j..0.(F...
        0x0030:  0073 5163 0000 0101 080a 7e34 7d97 3146  .sQc......~4}.1F
        0x0040:  ce48 504f 5354 202f 5f73 6561 7263 6820  .HPOST./_search.
        0x0050:  4854 5450 2f31 2e31 0d0a 5573 6572 2d41  HTTP/1.1..User-A
        0x0060:  6765 6e74 3a20 6375 726c 2f37 2e31 392e  gent:.curl/7.19.
        0x0070:  3720 2878 3836 5f36 342d 7265 6468 6174  7.(x86_64-redhat
        0x0080:  2d6c 696e 7578 2d67 6e75 2920 6c69 6263  -linux-gnu).libc
        0x0090:  7572 6c2f 372e 3139 2e37 204e 5353 2f33  url/7.19.7.NSS/3
        0x00a0:  2e31 352e 3320 7a6c 6962 2f31 2e32 2e33  .15.3.zlib/1.2.3
        0x00b0:  206c 6962 6964 6e2f 312e 3138 206c 6962  .libidn/1.18.lib
        0x00c0:  7373 6832 2f31 2e34 2e32 0d0a 486f 7374  ssh2/1.4.2..Host
        0x00d0:  3a20 6170 7065 6c73 3031 703a 3932 3030  :.server01p:9200
        0x00e0:  0d0a 4163 6365 7074 3a20 2a2f 2a0d 0a43  ..Accept:.*/*

Script para listar aplicações do WebSphere via wsadmin

Esse script utiliza a biblioteca wsadminlib, que facilita muito o uso:

execfile('wsadminlib.py')
print "app;cluster;startingWeight;VirtualHost;ContextRoot"
apps = listApplications()
for app in apps:
    cluster = getClusterTargetsForApplication(app)
    priority = AdminConfig.show(AdminConfig.showAttribute(AdminConfig.getid('/Deployment:'+app+'/'),'deployedObject'),'startingWeight').split()[1].replace(']','')
    vh = getApplicationVirtualHost(app) or ''
    cr = getApplicationContextRoot(app) or ''
    print app+';'+cluster[0]+';'+priority+';'+vh+';'+cr

As colunas estão separadas por ponto-vírgula para abrir diretamente no Excel brasileiro.

Script para listar portas no WebSphere via wsadmin

print "CellName,NodeName,ClusterName,ServerName,host,portRMI,portWeb"
clusters = AdminConfig.list('ServerCluster').splitlines()
for cluster in clusters :
    ClusterName = cluster.split( '(', 1 )[ 0 ]
    servers = AdminConfig.list('ClusterMember', cluster).splitlines()
    for server in servers :
        ServerName = server.split( '(', 1 )[ 0 ]
        ServerId = AdminConfig.getid('/ServerEntry:'+ServerName+'/')
        CellName = ServerId.split( '/' )[ 1 ]
        NodeName = ServerId.split( '/' )[ 3 ].split('|',1)[0]
        NamedEndPoints = AdminConfig.list('NamedEndPoint', ServerId).splitlines()
        for namedEndPoint in NamedEndPoints:
            endPointName = AdminConfig.showAttribute(namedEndPoint, "endPointName" )
            endPoint = AdminConfig.showAttribute(namedEndPoint, "endPoint" )
            if endPointName=='WC_defaulthost':
                portWeb = AdminConfig.showAttribute(endPoint, "port" )
            if endPointName=='BOOTSTRAP_ADDRESS':
                host = AdminConfig.showAttribute(endPoint, "host" )
                portRMI = AdminConfig.showAttribute(endPoint, "port" )
        print CellName+","+NodeName+","+ClusterName+","+ServerName+","+host+","+portRMI+","+portWeb