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;
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 fabiann.freitas@hotmail.com ou badspiritz@hotmail.com.
[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
[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