Num desses dias que começaram o ano, precisei fazer o monitoramente de uma mensagem em SOAP (padrão de comunicação dos sistema de pré-pago com que trabalho). Estava acostumado ao uso do wireshark pra fazer isso, mas descobri que não tinha o mesmo instalado.
Instalar um wireshark não é nada demais pra quem tem apt-get, mas como eu estava dentro do ambiente da empresa e não queria problemas com a área de segurança da informação, que monitora o download de aplicativos como o wireshark, resolvi fazer direto com tcpdump.
Para isso basta usar os parâmetros "-s 0", para definir tamanho máximo de pacote (não pegar somente alguns bytes), "-l" pra fazer a saída sem bufferização e, finalmente, "-A" para ter uma saída em modo texto dos caractéres ASCII dos pacotes capturados.
Com isso, utilizei o comando "tcpdump -n -s 0 -l -A -i lo port 10066" e pude verificar se meu protocolo SOAP estava enviando os cabeçalhos corretamente.
root@shibboleet:~# tcpdump -n -s 0 -l -A -i eth0 port 10066
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
17:04:12.661207 IP 10.1.2.5.43789 > 10.1.2.5.10066: Flags [S], seq 2942898742, win 32792, options [mss 16396,sackOK,TS val 284979440 ecr 0,nop,wscale 7], length 0
E..<b.@.@...
{..
'R.i.6........KB....@....
..p.........
17:04:12.661232 IP 10.1.2.5.10066 > 10.1.2.5.43789: Flags [S.], seq 2517428391, ack 2942898743, win 32768, options [mss 16396,sackOK,TS val 284979440 ecr 284979440,nop,wscale 7], length 0
E..<..@.@...
{..
.....i.7....KB....@....
..p...p.....
17:04:12.661251 IP 10.1.2.5.43789 > 10.1.2.5.10066: Flags [.], ack 1, win 257, options [nop,nop,TS val 284979440 ecr 284979440], length 0
E..4b.@.@...
{..
'R.i.7........K:.....
..p...p.
17:04:12.661302 IP 10.1.2.5.43789 > 10.1.2.5.10066: Flags [P.], seq 1:1441, ack 1, win 257, options [nop,nop,TS val 284979440 ecr 284979440], length 1440
E...b.@.@..H
{..
'R.i.7........P......
..p...p.POST /Air HTTP/1.1
Accept-Encoding: identity
Content-Length: 1245
Host: air:10066
User-Agent: DSMN/4.4/1.0
Connection: close
Content-Type: text/xml
Authorization: Basic dmFpbGE6c2V1dHJvdXhh
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<methodCall>
<methodName>UpdateOffer</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>originNodeType</name>
<value>
<string>EXT</string>
</value>
</member>
<member>
<name>originHostName</name>
<value>
<string>HELIO</string>
</value>
</member>
<member>
<name>originTransactionID</name>
<value>
<string>410</string>
</value>
</member>
<member>
<name>originTimeStamp</name>
<value>
<dateTime.iso8601>20130115T17:04:12+0000</dateTime.iso8601>
</value>
</member>
<member>
<name>subscriberNumber</name>
<value>
<string>5511912345678</string>
</value>
</member>
<member>
<name>offerID</name>
<value>
<int>11</int>
</value>
</member>
<member>
<name>offerType</name>
<value>
<int>0</int>
</value>
</member>
<member>
<name>expiryDate</name>
<value>
<dateTime.iso8601>20131027T12:00:00+0000</dateTime.iso8601>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
17:04:12.661312 IP 10.1.2.5.10066 > 10.1.2.5.43789: Flags [.], ack 1441, win 256, options [nop,nop,TS val 284979440 ecr 284979440], length 0
E..4.X@.@.WX
{..
.....i......K:.....
..p...p.
17:04:12.829800 IP 10.1.2.5.10066 > 10.1.2.5.43789: Flags [P.], seq 1:836, ack 1441, win 256, options [nop,nop,TS val 284979609 ecr 284979440], length 835
E..w.Y@.@.T.
{..
.....i......N}.....
..q...p.HTTP/1.1 200 OK
Content-Length: 681
Content-Type: text/xml
X-Powered-By: AIR-XmlRpc Server 3.2
Server: air
Date: Tue, 15 Jan 2013 19:04:24 GMT
<?xml version="1.0" encoding="utf-8"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>expiryDate</name>
<value><dateTime.iso8601>20131027T12:00:00+0000</dateTime.iso8601></value>
</member>
<member>
<name>offerID</name>
<value><i4>11</i4></value>
</member>
<member>
<name>offerType</name>
<value><i4>0</i4></value>
</member>
<member>
<name>originTransactionID</name>
<value><string>410</string></value>
</member>
<member>
<name>responseCode</name>
<value><i4>0</i4></value>
</member>
<member>
<name>startDate</name>
<value><dateTime.iso8601>20130115T12:00:00+0000</dateTime.iso8601></value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
17:04:12.829865 IP 10.1.2.5.43789 > 10.1.2.5.10066: Flags [.], ack 836, win 256, options [nop,nop,TS val 284979609 ecr 284979609], length 0
E..4b.@.@...
{..
'R.i..........K:.....
..q...q.
17:04:12.830228 IP 10.1.2.5.43789 > 10.1.2.5.10066: Flags [F.], seq 1441, ack 836, win 256, options [nop,nop,TS val 284979609 ecr 284979609], length 0
E..4b.@.@...
{..
'R.i..........K:.....
..q...q.
17:04:12.865118 IP 10.1.2.5.10066 > 10.1.2.5.43789: Flags [F.], seq 836, ack 1442, win 256, options [nop,nop,TS val 284979644 ecr 284979609], length 0
E..4.Z@.@.WV
{..
.....i......K:.....
..q...q.
17:04:12.865140 IP 10.1.2.5.43789 > 10.1.2.5.10066: Flags [.], ack 837, win 256, options [nop,nop,TS val 284979644 ecr 284979644], length 0
E..4b.@.@...
{..
'R.i..........K:.....
..q...q.
^C
10 packets captured
20 packets received by filter
0 packets dropped by kernel
Nesse caso é uma aplicação que roda na porta 10066 que foi criada pra atribuir "Offers", ou ofertas de serviços através de um servidor que se chama AIR, Account Information and Refilling.
Nunca postei sobre o assunto aqui, mas já faz algum tempo que tenho estudado investimentos em bolsa de valores. Ou trading, como também é conhecido.
Com o carrossel dos mercados atualmente, alguns devem achar loucura investir em algo como ações. Realmente é. E exige estudo, paciência e disciplina. Essa última a mais difícil para mim (e a grande maioria dos investidores). E tenho gostado de estar investindo em bolsa mais pela parte do esforço intelectual que pelos ganhos recebidos, tanto que até agora não recebi nada que vale-se o tempo dedicado. Mas é um bom hobbie intelectual.
Como fiel usuário de Linux/FreeBSD e outras alternativas não-windows, é difícil encontrar um aplicativo bom para análise de mercado. Na mundo Windows, existe o "MetaStock". Realmente um software profissional, mas totalmente pra Windows (sem versões em Java). Existem alguns relatos de sucesso utilizando o MetaStock através do Wine, mas isso está longe de ser o que eu busco: um software nativo para Linux/FreeBSD.
Estava então utilizando o Aiotrade , um software escrito em Java. Atende muito das necessidades de um trader, como buscar as informações dos valores de ações via Yahoo (onde é possível buscar os índices do Bovespa), gráficos diário, semanal e mensal, indicadores como bandas de Bollinger, SAR, média, etc. Infelizmente alguns gráficos não são legíveis e o uso de Java acaba com toda a memória do sistema depois de algum tempo de uso. Fora isso, seu desenvolvimento parou em 2006.
Dando uma procurada na Internet nesse fim de semana, encontrei um Blog interessante:
Além das ferramentas que já conhecia, algumas em modo texto (Venice) ou quase isso, encontrei algumas novas. A que mais chamou minha atenção foi o Itrade.
Itrade é um programa escrito em Python, utilizando wxPython (ou wxWindows) para melhorar o visual da interface. Enquanto o Aiotrade está fora do meu alcançe para melhorar ou manter, o Itrade já acena com mais simpatia. No momento baixei os fontes (ou executável, uma vez que é escrito em Python) e estou brigando pra fazer funcionar:
helio@musashi:itrade$ python itrade.py
iTrade(alpha) - 0.4.6
Nausicaa2 - (official) (r836)
Psyco is not running (library not found)
User Configuration : usrdata/usrconfig.txt
XLRD package (http://www.lexicon.net/sjmachin/xlrd.htm) not installed.
wxPython Selected : 2.8-gtk2-unicode
/usr/local/lib/python2.5/site-packages/wx-2.8-gtk2-unicode/wx/_core.py:14240:
UserWarning: wxPython/wxWidgets release number mismatch warnings.warn("wxPython/wxWidgets release number mismatch")
Traceback (most recent call last):
File "itrade.py", line 221, in main() File "itrade.py", line 202, in main import itrade_wxmain
File "/tmp/itrade/itrade_wxmain.py", line 57, in from itrade_wxbook import iTradeMainWindow
File "/tmp/itrade/itrade_wxbook.py", line 59, in from itrade_wxquote import open_
iTradeQuote,addInMatrix_iTradeQuote,removeFromMatrix_iTradeQuote
File "/tmp/itrade/itrade_wxquote.py", line 63, in
from myfinance import candlestick, plot_day_summary2, candlestick2, index_bar, volume_overlay2, plot_day_summary3
File "/usr/local/lib/python2.5/site-packages/wxaddons/__init__.py", line 180, in import_hook return
builtin_import(name, globals, locals, fromlist)
File "/tmp/itrade/myfinance.py", line 24, in from matplotlib.transforms import Value, zero, one, \
ImportError: cannot import name Value
Infelizmente descobri que uma das dependências, Matplotlib, teve uma atualização de API, o que está fazendo gerar o erro acima. Estou vendo o que é possível fazer, mas mesmo assim esse projeto mostra-se como promissor. E com as frequentes quedas da bolsa, acho que os problemas de biblioteca e dependências não afetarão minha performance tanto assim.