quinta-feira, 13 de março de 2008

Instalação do Imsniff para monitorar conversas do Messenger

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.

Nenhum comentário: