Obtendo os pacotes:
wget http://ufpr.dl.sourceforge.net/sourceforge/im-snif/imsniff_0.04.tgz
apt-get install libpcap-dev
apt-get install g++
Instalando:
- Descompactar o imsniff_0.04.tgz;
- Serão criadas as pastas doc, linux, src, windows;
- Executar:
linux/build
- Copiar o arquivo doc\imsniff.conf.sample para /etc/imsniff.conf;
- Alterar o arquivo /etc/imsniff.conf:
daemonize = 0 # alterar para 1, execução como serviço
promisc = 0
verbose = 2
chatdir = /tmp/chats # pasta aonde serão gravados os chats
debugdir = /tmp/debug
interface eth0 # interface aonde ele vai escutar
Corrigindo bug (versão 0.04):
- O bug faz o serviço cair toda hora;
- Editar o arquivo src/msn_conntrack.cpp e acrescentar as linhas com + na frente:
void add_user_to_sb (struct msn_connection *conn, u_char *user)
{
if (conn!=NULL && conn->users!=NULL)
{
int i=0;
while (inum_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);
}
- Editar o arquivo src/util.cpp e acrescentar as linhas com + e retirar as linhas com - na frente:
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;
}
- Entrar na pasta linux e compilar com ./build;
Execução:
- Usar o Webmin para iniciar o serviço automaticamente.