Resolvendo o problema de instabilidade do IMSNIFF - Versão 0.04 (Beta)

Publicado por Fabiann Freitas em 24/04/2007

[ Hits: 7.134 ]

 


Resolvendo o problema de instabilidade do IMSNIFF - Versão 0.04 (Beta)



Existe uma instabilidade nessa versão do imsniff que pode ser resolvida conforme as alterações abaixo no código fonte.

Versao do imsniff: 0.04

No meu caso, usei o nome do diretório para descompactar o daemon: imsniff/. Entrem no diretorio imsniff/src/ (cd imsniff/src).

Editem o arquivo msn_conntrack.cpp com seu editor preferido. Irão fazer umas inclusões na função add_user_to_sb(), que é logo a primeira no arquivo. As linhas com o sinal "+" na frente deverão ser acrescentadas.

void add_user_to_sb (struct msn_connection *conn, u_char *user)
{
if (conn!=NULL && conn->users!=NULL)
{
int i=0;
while (i<conn->num_users)
{
if (strcmp ((char *) conn->users[i], (char *) user)==0)
return; // Don't duplicate
i++;
}
}

log_debug (5, "Adding user [%s] to SB",user);
+ if (!conn) {
+ conn = (struct msn_connection *) malloc (sizeof (struct msn_connection));
+ if (!conn)
+ return;
+ if (msn_conns_first==NULL)
+ msn_conns_first=conn;

+ memset (conn,0,sizeof (struct msn_connection)); // All zeros is fine
+ if (msn_conns_last != NULL)
+ {
+ msn_conns_last->next=conn;
+ conn->previous=msn_conns_last;
+ }
+ msn_conns_last=conn;

+ conn->users=NULL;
+ conn->num_users=0;
+ conn->log_full_path=NULL;

+ }

conn->users=(u_char **) realloc (conn->users, sizeof (u_char *) * (conn->num_users+1));
log_debug (5, "Done realloc");
if (conn->users!=NULL)
{
conn->users[conn->num_users]=(u_char *) malloc (strlen ((char *) user) +1 );
log_debug (5, "Done malloc");
strcpy ((char *) conn->users[conn->num_users],(char *) user);
log_debug (5, "Done strcpy");
conn->num_users++;
}
log_debug (5, "Done, number of users now = %d",conn->num_users);
}

Gravem as alterações e editem outro arquivo, chamado util.cpp e localizem a função get_tokens() e novamente a linha com o sinal de "+" deve ser acrescentada e com sinal de "-", retirada.

int get_tokens (u_char *line, u_char ***tokens, int max_tokens)
{
log_debug (5, "entry in get_tokens");
int capacity = (max_tokens==0)?50:max_tokens;
/* First, delete the tokens if there are any ... */
free_array(tokens);
*tokens=(u_char **) malloc (sizeof (u_char *) * (capacity +1)); // Final one is NULL
if (*tokens==NULL)
return OUT_OF_MEMORY;
int num=0; /* Number of tokens added so far */
u_char *now = line;
u_char *newtoken;

char tmp[255];

for (;;)
{
size_t i;
/* Skip spaces and control stuff */
while (*now<=' ' && *now!=0)
{
now++;
}

if (*now==0) /* End of line */
break;

i=0;
if (max_tokens==num+1 && max_tokens!=0)
i=strlen ((char *) now);
else
{
while (now[i]>' ') /* Look ahead, how long is the next token? */
i++;
}
newtoken=(u_char *) malloc (i+1);
memcpy (newtoken, now, i);
now = now + i;
newtoken[i]=0;

if (num==capacity)
{
capacity += 10;
*tokens = (u_char **) realloc (*tokens, sizeof (u_char *) * (capacity +1));
if (*tokens==NULL) /* A bit unstable now I'm afraid */
return OUT_OF_MEMORY;
}

(*tokens)[num]=newtoken;

if (num==7)
{
+ break;
- exit (7);
}
num++;
}

(*tokens)[num]=NULL;
return num;
}

Gravem as alterações e compilem. Como você estará no diretório src/, deverá se posicionar no diretório linux/:

$ cd ../linux
$ ./build


Prontinho, só rodar e talz!!!

Abraços a todos.

Qualquer onda tô no msn [email protected] ou [email protected]

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

As aventuras de um administrador de redes no mundo do QoS

Pidgin - Onde são gravados os históricos das conversas?

Google Chrome no Slackware 14x

Bloqueando Google Talk sem bloquear o GMail

HTB, uma alternativa para quem deseja limitar banda

  

Comentários
[1] Comentário enviado por martysouza em 07/05/2007 - 17:09h

Amigo posta os arquivos completos ai pra gente ., nessa edição não estou conseguinte recompilar

[2] Comentário enviado por martysouza em 07/05/2007 - 17:19h

Fica dando esses erros

../src/util.cpp: In function âint get_tokens(u_char*, u_char***, int)â:
../src/util.cpp:459: error: expected primary-expression before âbreakâ
../src/util.cpp:459: error: expected `;' before âbreakâ
../src/util.cpp:460: error: wrong type argument to unary minus
../src/msn_conntrack.cpp: In function âvoid add_user_to_sb(msn_connection*, u_char*)â:
../src/msn_conntrack.cpp:23: error: expected primary-expression before âifâ
../src/msn_conntrack.cpp:23: error: expected `;' before âifâ
../src/msn_conntrack.cpp:307: error: expected `}' at end of input

[3] Comentário enviado por trashfull em 05/06/2007 - 16:29h

ótima dica badspirit, vc poderia ajudar os desenvolvedores deste sniff, quem sabe seu código de correção em uma nova versão?

Parabens
[ ]s

[4] Comentário enviado por badspirit em 18/06/2007 - 16:35h

ó soh .. peguem o codigo modificado aki:

http://www1.bad.spirit.nom.br/imsn/msn_conntrack.cpp
http://www1.bad.spirit.nom.br/imsn/util.cpp

copiem isso la pro src/
e compilem seguindo la os passos da dica inicial la.

se notarem alguma cagada, entrem em contato, q a gente tenta arrumar esse trem.

Abracos,




[5] Comentário enviado por robertofaria em 18/01/2008 - 12:05h

Bom dia Fabiann. Aqui Instalei o pacote libpcap-0.9.8, descompactei, instalei o imsniff, deu tudo certo, realizei o comando sh build, depois rodei o imsniff, porém o seguinte, quanto entrei no diretório # /tmp/chats/ , não consegui visualizar os logs do msn. Digitei o comandoi tail -f e nada. Uso a distruição Slackware 11.0 nao consigo ver os logs de maneira alguma. Vc poderia me ajudar? Muito obrigado



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts