tcpick-project Mailing List for tcpick: tcp stream tracker and sniffer (Page 4)
Status: Beta
Brought to you by:
duskdruid
You can subscribe to this list here.
2004 |
Jan
(18) |
Feb
(2) |
Mar
(2) |
Apr
(15) |
May
(2) |
Jun
(8) |
Jul
(2) |
Aug
(1) |
Sep
(9) |
Oct
(2) |
Nov
(6) |
Dec
(7) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2005 |
Jan
(9) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
(1) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
2006 |
Jan
|
Feb
|
Mar
(2) |
Apr
(2) |
May
|
Jun
(2) |
Jul
(1) |
Aug
(1) |
Sep
(3) |
Oct
(4) |
Nov
(4) |
Dec
(7) |
2007 |
Jan
(6) |
Feb
(5) |
Mar
(2) |
Apr
(2) |
May
(2) |
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(5) |
2008 |
Jan
(1) |
Feb
(1) |
Mar
(3) |
Apr
(1) |
May
|
Jun
(2) |
Jul
(2) |
Aug
(3) |
Sep
(11) |
Oct
(9) |
Nov
(23) |
Dec
(35) |
2009 |
Jan
(4) |
Feb
(17) |
Mar
(21) |
Apr
(39) |
May
(48) |
Jun
(35) |
Jul
(29) |
Aug
(7) |
Sep
(3) |
Oct
(4) |
Nov
(5) |
Dec
(9) |
2010 |
Jan
(8) |
Feb
(7) |
Mar
(4) |
Apr
(1) |
May
|
Jun
(1) |
Jul
(4) |
Aug
(1) |
Sep
(3) |
Oct
(1) |
Nov
(1) |
Dec
|
2011 |
Jan
|
Feb
(3) |
Mar
|
Apr
(2) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(3) |
Dec
|
2012 |
Jan
(2) |
Feb
|
Mar
(1) |
Apr
(2) |
May
|
Jun
(3) |
Jul
(3) |
Aug
(1) |
Sep
(2) |
Oct
|
Nov
(1) |
Dec
|
2013 |
Jan
(6) |
Feb
|
Mar
(6) |
Apr
(3) |
May
(4) |
Jun
|
Jul
(1) |
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(1) |
Nov
|
Dec
|
2015 |
Jan
(2) |
Feb
(4) |
Mar
(3) |
Apr
(4) |
May
(1) |
Jun
|
Jul
(1) |
Aug
(2) |
Sep
(1) |
Oct
|
Nov
(1) |
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
|
Dec
|
2018 |
Jan
(2) |
Feb
(2) |
Mar
(3) |
Apr
(3) |
May
(4) |
Jun
(4) |
Jul
(4) |
Aug
(1) |
Sep
(2) |
Oct
|
Nov
|
Dec
(1) |
2019 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
(1) |
2021 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
2022 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2024 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2025 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: angora<dem...@cl...> - 2009-07-23 12:30:32
|
Hdow Seeniors Can Enjoy sex and Hold Onto the Passion.www.re25[.org] |
From: wauwatosa <gal...@gl...> - 2009-07-14 11:16:29
|
Improve Love Liife - Tips on How to Improve Your Love Lrife.www .se57. net |
From: Jurden <fot...@he...> - 2009-07-06 06:36:20
|
Love Potioon No.9 -- The Human sex Pheromone www. via86. com. Surgeons: 8-Innch Forecps Left in Teen |
From: garbage <ga...@pr...> - 2009-07-02 10:12:32
|
Seex orr Attachment: Why Do We Fall in Love, Really? www. med95. net. iFrst Marrs Avalanches Seen In Action |
From: Takashi W. <re...@sp...> - 2009-06-30 10:47:39
|
===== file: patch-tcpick-0.2.1-6-watanabe1.24.part2of2 ===== diff -rupN deb-orig/tcpick-0.2.1/src/tracker.c tcpick-0.2.1/src/tracker.c --- deb-orig/tcpick-0.2.1/src/tracker.c 2009-06-30 09:02:57.000000000 +0900 +++ tcpick-0.2.1/src/tracker.c 2009-06-30 09:04:59.000000000 +0900 @@ -28,27 +28,81 @@ #include "tcpick.h" #include "extern.h" -struct CONN * first_conn = NULL; /*all connections, ends on a 0*/ -struct CONN * last_conn = NULL; +struct CONN_DESC * first_conn = NULL; /*all connections, ends on a 0*/ +struct CONN_DESC * last_conn = NULL; + +/* The first SYN of the 3-way handshake is of the client */ +#define FOUND_CONN(conn) ( \ + conn->client.ip.s_addr == ippacket->ip_src.s_addr && \ + conn->server.ip.s_addr == ippacket->ip_dst.s_addr && \ + conn->client.port == tcppacket->source && \ + conn->server.port == tcppacket->dest \ + ) + +#define THIS_IS_TRACKER_C "tracker.c" +#define ASSERT_LASTCHILD_EXISTS(conn){ \ + if(conn->lastincar == NULL) \ + suicide(THIS_IS_TRACKER_C, "The lastincar doesn't exist."); \ + } + +#define UPDATE_LASTINCAR(conn_ptr, new){ \ + conn_ptr->lastincar = new; \ + conn_ptr->client.lastincar = & (conn_ptr->lastincar->client); \ + conn_ptr->server.lastincar = & (conn_ptr->lastincar->server); \ + } + /* If you forgot to update {client,server}.lastincar, you would encounter a reproducible horrible bus error at a [cm]alloc call */ int -status_switch(struct CONN * prev, enum STATUS status) +status_switch(struct CONN_DESC * prev_conn, enum STATUS status) { -#define CURR (prev->next) - display_status( stdout, CURR, status ); + display_status( stdout, CURRENT_CONN, status ); if ( status == CLOSED || status == RESET || status == EXPIRED ) - rmconn( prev ); + rmconn( prev_conn, 0 ); else - CURR->status = status; + CURRENT_CONN->lastincar->status = status; } +/* lastincar related */ int -newconn( struct CONN * prev_ring ) +newincar( struct CONN_DESC * prev_conn ) +{ + struct CONN_INCAR * cinc; + cinc = S_malloc( sizeof *cinc ); + memset(cinc, 0, sizeof *cinc ); + + CURRENT_CONN->count_cycles++; + + if( CURRENT_CONN->lastincar != NULL ){ + cinc->prev = CURRENT_CONN->lastincar; + } + UPDATE_LASTINCAR(CURRENT_CONN, cinc); + + CURRENT_CONN->lastincar->cyclenum = CURRENT_CONN->count_cycles; + + CURRENT_CONN->lastincar->client.sip = ntohl(tcppacket->seq) + 1; + /* insert a dummy unack data to prevent the flush from skipping the first packet(s) */ + addfr( & (CURRENT_CONN->lastincar->client.unack), + CURRENT_CONN->lastincar->client.wlen, + 0, + "", + 0 ); + CURRENT_CONN->lastincar->client.max_off = 0; + + CURRENT_CONN->lastincar->client.oth = & (CURRENT_CONN->lastincar->server); + CURRENT_CONN->lastincar->server.oth = & (CURRENT_CONN->lastincar->client); + + CURRENT_CONN->lastincar->lasttime = time(NULL); + + status_switch( prev_conn, SYN_SENT ); +} + +int +newconn() /* allocates a new connection */ { - struct CONN * conn; + struct CONN_DESC * prev_conn = first_conn; if( flags.trackonly != -1 ) { if( flags.trackonly_first && @@ -59,53 +113,148 @@ newconn( struct CONN * prev_ring ) else count_opened++; } + + while( CURRENT_CONN ){ + if( FOUND_CONN( CURRENT_CONN ) ){ + newincar( prev_conn ); + return 0; + } + + prev_conn = prev_conn->next; + } + count_conns++; - conn = ( struct CONN * )S_calloc( sizeof( struct CONN ), 1 ); - - prev_ring->next = conn; /* and the chain becomes longer... :) + CURRENT_CONN = S_malloc( sizeof *CURRENT_CONN ); + memset(CURRENT_CONN, 0, sizeof *CURRENT_CONN ); + /* and the chain becomes longer... :) thank you mainman for this good idea! */ - last_conn = conn; + last_conn = CURRENT_CONN; - conn->client.side = CLIENT; - conn->server.side = SERVER; + CURRENT_CONN->client.side = CLIENT; + CURRENT_CONN->server.side = SERVER; - conn->client.ip.s_addr = ippacket->ip_src.s_addr; - conn->server.ip.s_addr = ippacket->ip_dst.s_addr; - conn->client.port = tcppacket->source; - conn->server.port = tcppacket->dest; - - conn->client.sip = ntohl(tcppacket->seq) + 1; + CURRENT_CONN->client.ip.s_addr = ippacket->ip_src.s_addr; + CURRENT_CONN->server.ip.s_addr = ippacket->ip_dst.s_addr; + CURRENT_CONN->client.port = tcppacket->source; + CURRENT_CONN->server.port = tcppacket->dest; + + CURRENT_CONN->client.oth = & (CURRENT_CONN->server); + CURRENT_CONN->server.oth = & (CURRENT_CONN->client); - conn->client.oth = & (conn->server); - conn->server.oth = & (conn->client); + CURRENT_CONN->num = count_conns; + CURRENT_CONN->count_cycles = 0; + + newincar( prev_conn ); + return 1; +} + + +void +getHexStr(char * cp, u_char * pay, int len) +{ + for( ; len > 0; cp += 3, ++pay, --len ){ + sprintf(cp, " %02X", *pay); + } + *cp = '\0'; +} + +void +checkUnack( struct CONN_DESC * conn_ptr, struct HOST_DESC * hdesc ) +{ + struct FRAGMENT * unack = hdesc->lastincar->unack; + if( unack->len == 0 ) + return; + + char *buf = S_malloc( (unack->len * 3 + 1) * sizeof *buf ); + getHexStr(buf, unack->payload, unack->len); + + err("[REMAINING @ conn#%d side=%d] len = %d, payload =%s\n", conn_ptr->num, hdesc->side, unack->len, buf); + + S_free( buf ); +} + +int +free_hincar( struct CONN_DESC * conn_ptr, struct HOST_DESC * hdesc, int freedescfilename ) +/* frees the host descriptor and closes the file */ +{ +#define FREE_HINCAR "free_hincar@tracker.c" + struct HOST_INCAR * hinc = hdesc->lastincar; + struct FRAGMENT * tmp; + + if( hinc->file ) { + fclose( hinc->file ); + if (flags.writer.type == UNIQUE) + hinc->oth->file = NULL; + } + if( hinc->filename && freedescfilename ) { + S_free( hinc->filename ); + hinc->filename = NULL; + } + + if( hinc->lockfilename ) { + unlink( hinc->lockfilename ); + S_free( hinc->lockfilename ); + hinc->lockfilename = NULL; + } - conn->num = count_conns; + while( hinc->unack ) { /* FIXME: hinc->unack should be just NULL when closes! + * I should check it! */ + checkUnack( conn_ptr, hdesc ); + S_free( hinc->unack->payload ); + hinc->unack->payload = NULL; + tmp = hinc->unack; + hinc->unack = hinc->unack->next; + S_free( tmp ); + } +} - conn->lasttime = time(NULL); +int +rmincar( struct CONN_DESC * conn_ptr ) +{ + struct CONN_INCAR * cinc; + + /* confirming the unack data to be flushed */ + flush_ack( & ( conn_ptr->client ), conn_ptr); + flush_ack( & ( conn_ptr->server ), conn_ptr); - status_switch( prev_ring, SYN_SENT ); + free_hincar( conn_ptr, &(conn_ptr->client), 1); + if (flags.writer.type == UNIQUE) free_hincar( conn_ptr, &(conn_ptr->server), 0); + else free_hincar( conn_ptr, &(conn_ptr->server), 1); + + cinc = conn_ptr->lastincar; + UPDATE_LASTINCAR(conn_ptr, cinc->prev); + + S_free( cinc ); } -int rmconn( struct CONN * prev_ring ) +int +rmconn( struct CONN_DESC * prev_conn, int recur ) /* removes from the linked-list and deallocates a connection - * prev_ring + * prev_conn */ { - struct CONN * curr = prev_ring->next; - struct CONN * conn; - - prev_ring->next = curr->next; - if( curr->next == NULL ) - last_conn = prev_ring; - - free_desc( &(curr->client), 1); - if (flags.writer.type == UNIQUE) free_desc( &(curr->server), 0); - else free_desc( &(curr->server), 1); - S_free( curr ); + struct CONN_DESC * curr = CURRENT_CONN; + struct CONN_DESC * conn; + + if( curr == NULL ) + suicide(THIS_IS_TRACKER_C, "curr is NULL."); + + do { + rmincar(curr); + }while( recur && curr->lastincar != NULL ); + + if( curr->lastincar == NULL ){ + CURRENT_CONN = curr->next; + if( CURRENT_CONN == NULL ) + last_conn = prev_conn; + + S_free( curr ); + } + conn = first_conn; - + if( flags.exitclosed ) { if( flags.exitclosed_first ) { /* -Ef */ while( conn->num > flags.exitclosed ) { @@ -120,38 +269,10 @@ int rmconn( struct CONN * prev_ring ) } } - if( flags.trackonly && + if( flags.trackonly > 0 && (! flags.trackonly_first) ) count_opened--; -} -int free_desc( struct HOST_DESC * desc, int freedescfilename ) -/* frees the host descriptor and closes the file */ -{ - struct FRAGMENT * tmp; - - if( desc->file ) { - fclose( desc->file ); - if (flags.writer.type == UNIQUE) - desc->oth->file = NULL; - } - if( desc->filename && freedescfilename ) { - S_free( desc->filename ); - desc->filename = NULL; - } - - if( desc->lockfilename ) { - unlink( desc->lockfilename ); - S_free( desc->lockfilename ); - desc->lockfilename = NULL; - } - - while( desc->unack ) { /* FIXME: desc->unack should be just NULL when closes! - * I should check it! */ - S_free( desc->unack->payload ); - desc->unack->payload = NULL; - tmp = desc->unack; - desc->unack = desc->unack->next; - S_free( tmp ); - } + return 1; } + diff -rupN deb-orig/tcpick-0.2.1/src/verify.c tcpick-0.2.1/src/verify.c --- deb-orig/tcpick-0.2.1/src/verify.c 2005-01-14 00:35:33.000000000 +0900 +++ tcpick-0.2.1/src/verify.c 2009-06-30 09:04:59.000000000 +0900 @@ -29,23 +29,9 @@ #include "tcpick.h" #include "extern.h" -#define CURRENT_CONN (prev_conn->next) - -#define ACK_OFF ntohl( tcppacket->ack_seq ) - Desc->oth->sip +#define ACK_OFF ntohl( tcppacket->ack_seq ) - hdesc->oth->lastincar->sip /* FIXME: to def.h? */ -#define IS_CLIENT_SENDER \ - CURRENT_CONN->client.ip.s_addr == ippacket->ip_src.s_addr && \ - CURRENT_CONN->server.ip.s_addr == ippacket->ip_dst.s_addr && \ - CURRENT_CONN->client.port == tcppacket->source && \ - CURRENT_CONN->server.port == tcppacket->dest - -#define IS_SERVER_SENDER \ - CURRENT_CONN->client.ip.s_addr == ippacket->ip_dst.s_addr && \ - CURRENT_CONN->server.ip.s_addr == ippacket->ip_src.s_addr && \ - CURRENT_CONN->client.port == tcppacket->dest && \ - CURRENT_CONN->server.port == tcppacket->source - #define IS_SYN_SENT \ tcppacket->syn == 1 && \ tcppacket->ack == 0 @@ -53,71 +39,75 @@ #define IS_SYN_RECEIVED \ tcppacket->syn == 1 && \ tcppacket->ack == 1 && \ - Desc->side == SERVER && \ - CURRENT_CONN->status == SYN_SENT + hdesc->side == SERVER && \ + CURRENT_CONN->lastincar->status == SYN_SENT #define IS_ESTABLISHING \ tcppacket->syn == 0 && \ tcppacket->ack == 1 && \ - Desc->side == CLIENT && \ - CURRENT_CONN->status == SYN_RECEIVED && \ - CURRENT_CONN->client.sip == ntohl( tcppacket->seq ) + hdesc->side == CLIENT && \ + CURRENT_CONN->lastincar->status == SYN_RECEIVED && \ + CURRENT_CONN->lastincar->client.sip == ntohl( tcppacket->seq ) #define IS_DATA_FLOW 1 #define IS_FIN_WAIT_1 \ tcppacket->fin == 1 && \ - CURRENT_CONN->status == ESTABLISHED + CURRENT_CONN->lastincar->status == ESTABLISHED #define IS_FIN_WAIT_2__CLOSE_WAIT \ tcppacket->ack == 1 && \ tcppacket->fin == 0 && \ - CURRENT_CONN->status == FIN_WAIT_1 && \ - CURRENT_CONN->closer != Desc->side + CURRENT_CONN->lastincar->status == FIN_WAIT_1 && \ + CURRENT_CONN->lastincar->closer != hdesc->side #define IS_TIME_WAIT__LAST_ACK \ tcppacket->ack == 1 && \ tcppacket->fin == 1 && \ - ( CURRENT_CONN->status == FIN_WAIT_2__CLOSE_WAIT || \ - CURRENT_CONN->status == FIN_WAIT_1 ) && \ - CURRENT_CONN->closer != Desc->side + ( CURRENT_CONN->lastincar->status == FIN_WAIT_2__CLOSE_WAIT || \ + CURRENT_CONN->lastincar->status == FIN_WAIT_1 ) && \ + CURRENT_CONN->lastincar->closer != hdesc->side #define IS_CLOSING \ tcppacket->ack == 1 && \ tcppacket->fin == 0 && \ - CURRENT_CONN->status == TIME_WAIT__LAST_ACK && \ - CURRENT_CONN->closer == Desc->side + CURRENT_CONN->lastincar->status == TIME_WAIT__LAST_ACK && \ + CURRENT_CONN->lastincar->closer == hdesc->side #define IS_RESET \ tcppacket->rst == 1 __inline__ int -established_packet ( struct CONN * conn_ptr, struct HOST_DESC * Desc) +established_packet ( struct CONN_DESC * conn_ptr, struct HOST_DESC * hdesc) /* called by verify() packets of established connections come here */ { register u_int32_t off; if( payload_len ) { - off = ntohl( tcppacket->seq ) - Desc->sip ; + off = ntohl( tcppacket->seq ) - hdesc->lastincar->sip ; /* unacknowledged data */ - addfr( & (Desc->unack), - Desc->wlen, + addfr( & (hdesc->lastincar->unack), + hdesc->lastincar->wlen, off, payload, payload_len ); + } + if( ACK_OFF > hdesc->oth->lastincar->max_off ){ + hdesc->oth->lastincar->max_off = ACK_OFF; + } + if( payload_len == 0) { /* acknowledge data */ - flush_ack ( Desc->oth, conn_ptr, ACK_OFF ); - } - else if( tcppacket->psh ) { + flush_ack ( hdesc->oth, conn_ptr ); + }else if( tcppacket->psh ) { /* PUSH data */ - flush_ack ( Desc, conn_ptr, ACK_OFF ); - } + flush_ack ( hdesc, conn_ptr ); + } } @@ -127,31 +117,31 @@ verify() this is the engine that matches the packets with their connection */ { - register struct HOST_DESC * Desc = NULL; + register struct HOST_DESC * hdesc = NULL; - register struct CONN * prev_conn; + register struct CONN_DESC * prev_conn; prev_conn = first_conn; /* SYN-SENT: (outside of the loop because the * loop is used for sessions just tracked) */ if( IS_SYN_SENT ) { - newconn( last_conn ); + newconn(); return(1); } if(! CURRENT_CONN ) return 0 ; - while (! Desc ) { + while (! hdesc ) { /* cycle until it finds a connection that matches on server or client side */ if ( IS_CLIENT_SENDER ) - Desc = & (CURRENT_CONN->client); + hdesc = & (CURRENT_CONN->client); else if ( IS_SERVER_SENDER ) - Desc = & (CURRENT_CONN->server); + hdesc = & (CURRENT_CONN->server); else { prev_conn = prev_conn->next; if(! CURRENT_CONN ) @@ -160,13 +150,20 @@ verify() } /* update time of last packet in connection */ - CURRENT_CONN->lasttime = time(NULL); + CURRENT_CONN->lastincar->lasttime = time(NULL); /* when this point is reached, we have found the right matching connection */ if( IS_SYN_RECEIVED ) { - CURRENT_CONN->server.sip = ntohl(tcppacket->seq) + 1; + CURRENT_CONN->lastincar->server.sip = ntohl(tcppacket->seq) + 1; + /* insert a dummy unack data to prevent the flush from skipping the first packet(s) */ + addfr( & (CURRENT_CONN->lastincar->server.unack), + CURRENT_CONN->lastincar->server.wlen, + 0, + "", + 0 ); + CURRENT_CONN->lastincar->server.max_off = 0; status_switch( prev_conn, SYN_RECEIVED ); return 1; } @@ -181,13 +178,13 @@ verify() /* data or ack packets */ if( IS_DATA_FLOW ) { if( REBUILD ) - established_packet ( CURRENT_CONN, Desc ); + established_packet ( CURRENT_CONN, hdesc ); } /* first FIN sent */ if( IS_FIN_WAIT_1 ) { status_switch( prev_conn, FIN_WAIT_1 ); - CURRENT_CONN->closer = Desc->side; + CURRENT_CONN->lastincar->closer = hdesc->side; return 1; } @@ -219,3 +216,16 @@ verify() /* nice work :^) */ } + +void +confirmFlush(){ + register struct CONN_DESC * prev_conn; + int i; + + prev_conn = first_conn; + for(i = 0; CURRENT_CONN; ++i ){ + rmconn( prev_conn, 1 ); + } + msg( 1, c_DONE, + "confirmFlush: done flushing the remaing connections. %d connections removed.", i ); +} diff -rupN deb-orig/tcpick-0.2.1/src/write.c tcpick-0.2.1/src/write.c --- deb-orig/tcpick-0.2.1/src/write.c 2009-06-30 09:02:57.000000000 +0900 +++ tcpick-0.2.1/src/write.c 2009-06-30 09:04:59.000000000 +0900 @@ -32,7 +32,7 @@ #include "lookup.h" __inline__ char * -avail_filename(struct CONN * conn_ptr, +avail_filename(struct CONN_DESC * conn_ptr, enum PART side, char * ext) /* finds an available name for the connection file, @@ -40,10 +40,10 @@ avail_filename(struct CONN * conn_ptr, to invent a different filename */ { - char * client_server; - char * base_name; - char * dir_name; - char * test_name; + char client_server[STATIC_CHAR_BUF_SIZE]; /* FIXME: [0.2.1-6 20090630] S_malloc related */ + char base_name[STATIC_CHAR_BUF_SIZE]; /* FIXME: [0.2.1-6 20090630] S_malloc related */ + char dir_name[STATIC_CHAR_BUF_SIZE]; /* FIXME: [0.2.1-6 20090630] S_malloc related */ + char test_name[STATIC_CHAR_BUF_SIZE]; /* FIXME: [0.2.1-6 20090630] S_malloc related */ char * ret; struct stat stat_struct; /* this gets the name of the host */ @@ -52,14 +52,9 @@ avail_filename(struct CONN * conn_ptr, int server_port=conn_ptr->server.port; int num = 0; - client_server = (char *)S_calloc(MAX_FILENAME_LENGHT,1); - base_name = (char *)S_calloc(MAX_FILENAME_LENGHT,1); - dir_name = (char *)S_calloc(MAX_FILENAME_LENGHT,1); - test_name = (char *)S_calloc(MAX_FILENAME_LENGHT,1); - if (flags.dirs > 0) { /* -D option */ - sprintf(dir_name,"%06u", conn_ptr->num / flags.dirs); + sprintf(dir_name,"%06u", conn_ptr->num / flags.dirs); /* FIXME: need cyclenum? */ if( stat(dir_name, &stat_struct) == -1 ) { switch (errno) { case ENOENT: @@ -93,7 +88,7 @@ avail_filename(struct CONN * conn_ptr, sprintf(base_name, "%s/tcpick_%s.both", dir_name, client_server); break; case 2: - sprintf(base_name, "%s/tcpick_%06u_%s.both", dir_name, conn_ptr->num, client_server); + sprintf(base_name, "%s/tcpick_%06u_%06u_%s.both", dir_name, conn_ptr->num, conn_ptr->lastincar->cyclenum, client_server); /* FIXME: need cyclenum? */ break; } } else { /* flags.writer.type == SEPARATE, @@ -120,12 +115,12 @@ avail_filename(struct CONN * conn_ptr, switch( side ) { case CLIENT: - sprintf(base_name, "%s/tcpick_%06u_%s.clnt", dir_name, conn_ptr->num, client_server); + sprintf(base_name, "%s/tcpick_%06u_%06u_%s.clnt", dir_name, conn_ptr->num, conn_ptr->lastincar->cyclenum, client_server); /* FIXME: need cyclenum? */ break; case SERVER: - sprintf(base_name,"%s/tcpick_%06u_%s.serv", dir_name, conn_ptr->num, client_server); + sprintf(base_name,"%s/tcpick_%06u_%06u_%s.serv", dir_name, conn_ptr->num, conn_ptr->lastincar->cyclenum, client_server); /* FIXME: need cyclenum? */ break; } break; @@ -141,59 +136,55 @@ avail_filename(struct CONN * conn_ptr, /* returning the right pointer and freeing wasted memory */ #ifdef HAVE_STRNDUP - ret = (char *)strndup( test_name, MAX_FILENAME_LENGHT ); + ret = (char *)S_strndup( test_name, MAX_FILENAME_LENGHT ); #else - ret = (char *)strdup( test_name ); + ret = (char *)S_strdup( test_name ); #endif - S_free( test_name ); - S_free( dir_name ); - S_free( base_name ); - S_free( client_server ); return ret; } void -open_file( struct CONN * conn_ptr, - struct HOST_DESC * desc ) +open_file( struct CONN_DESC * conn_ptr, + struct HOST_DESC * hdesc ) { static char * s; FILE * lockfile; /* preparing for the connection side file */ if(flags.writer.type == UNIQUE - && desc->oth->file != NULL ) { + && hdesc->oth->lastincar->file != NULL ) { /* user want a unique output file, and it was just opened! */ - desc->file = desc->oth->file; - desc->filename = desc->oth->filename; + hdesc->lastincar->file = hdesc->oth->lastincar->file; + hdesc->lastincar->filename = hdesc->oth->lastincar->filename; } else { - s = (char *)avail_filename( conn_ptr, desc->side, "dat" ); + s = (char *)avail_filename( conn_ptr, hdesc->side, "dat" ); - desc->file = fopen( s , "a" ); - if( desc->file == NULL ) + hdesc->lastincar->file = fopen( s , "a" ); + if( hdesc->lastincar->file == NULL ) fault("open_file", "fopen returned NULL"); - desc->filename = s; + hdesc->lastincar->filename = s; - s = (char *)avail_filename( conn_ptr, desc->side, "lck"); + s = (char *)avail_filename( conn_ptr, hdesc->side, "lck"); lockfile = fopen( s , "a" ); if( lockfile == NULL ) fault("open_file", "fopen returned NULL"); fclose(lockfile); - desc->lockfilename = s; + hdesc->lastincar->lockfilename = s; } return; } __inline__ int -flowflush ( struct CONN * conn_ptr, - struct HOST_DESC * desc, +flowflush ( struct CONN_DESC * conn_ptr, + struct HOST_DESC * hdesc, u_char * buf, int buflen ) /* data that are acknowledged come here in order to be written to their file, or to stdout */ { /* -b set of options */ - if ( desc->side == flags.display_rebuild.side ) + if ( hdesc->side == flags.display_rebuild.side ) out_flavour ( flags.display_rebuild.flavour, stdout, buf, buflen ); @@ -204,33 +195,33 @@ flowflush ( struct CONN * conn_ptr, stdout, buf, buflen ); /* -w set of options */ - if ( desc->side == flags.writer.side ) { + if ( hdesc->side == flags.writer.side ) { - if(! desc->file ) - open_file( conn_ptr, desc ); + if(! hdesc->lastincar->file ) + open_file( conn_ptr, hdesc ); out_flavour ( flags.writer.flavour, - desc->file, buf, buflen ); + hdesc->lastincar->file, buf, buflen ); } else if ( flags.writer.side == BOTH ) { - if(! desc->file ) - open_file( conn_ptr, desc ); + if(! hdesc->lastincar->file ) + open_file( conn_ptr, hdesc ); if ( flags.writer.banner == 1 ) { /* -wb */ /* FIXME: add it to `-b' too? Do a function for this? */ - fprintf(desc->file, - (desc->side == CLIENT) + fprintf(hdesc->lastincar->file, + (hdesc->side == CLIENT) ? "\n[client] %d:%d (%d)\n" : "\n[server] %d:%d (%d)\n", - desc->wlen, - desc->wlen + buflen, + hdesc->lastincar->wlen, + hdesc->lastincar->wlen + buflen, buflen); } out_flavour ( flags.writer.flavour, - desc->file, buf, buflen ); + hdesc->lastincar->file, buf, buflen ); } } |
From: Takashi W. <re...@sp...> - 2009-06-30 10:45:58
|
Hi. I think I managed to do two things: (1) to prevent the flush from skipping the first payload(s) of session packets which were not ordered correctly [CODE] take a look at: (1) while loop cond. : flush_ack() : fragments.c (2) ALL : addfr() : fragments.c (3) max_off variable : established_packet() : verify.c (2) (with the new TCP connection incarnation mechanism) to prevent that stale connections were reused [CODE] take a look at: (1) conn.h (2) def.h (3) tracker.c (4) write.c (5) verify.c (6) debug.c (refactoring stuff) (7) display.c (refactoring stuff) (8) extern.h (refactoring stuff) (9) globals.h (refactoring stuff) (10) timer.c (refactoring stuff) (11) tcpick.c (refactoring stuff/minor changes(confirmFlush())) Also I rewrote some parts of code to remove minor bugs. [CODE] take a look at: (1) break statement : args.c (2) IP_SIZE/ip_size : loop.c (might well be unnecessary) (3) flags.trackonly : tracker.c On the way to develop, I was forgetting to update some pointers and encountered a bus error. To figure out the cause, I unnecesarily replaced some [cm]alloc calls with static variables and the memory footprint might've been a little bigger. You can ignore those parts of this patch if you'd like. [CODE] take a look at: (1) datalink.c (2) def.h (3) display.c (4) globals.h (5) lookup_query.c (6) lookup_tree.c (7) msg.c (8) quit.c (9) tcpick.c (10) time.c (11) timer.c (12) write.c I did: First patch http://cdn.debian.or.jp/debian/pool/main/t/tcpick/tcpick_0.2.1-6.diff.gz Then patch this: ===== file: patch-tcpick-0.2.1-6-watanabe1.24.part1of2 ===== diff -rupN deb-orig/tcpick-0.2.1/src/args.c tcpick-0.2.1/src/args.c --- deb-orig/tcpick-0.2.1/src/args.c 2009-06-30 09:02:57.000000000 +0900 +++ tcpick-0.2.1/src/args.c 2009-06-30 09:04:59.000000000 +0900 @@ -274,7 +274,7 @@ parse_args(int argc, char ** argv) "-F option needs a number\n" "i.e. -F1 or -F2" ); } - + break; case 'h': flags.header = 1; break; diff -rupN deb-orig/tcpick-0.2.1/src/conn.h tcpick-0.2.1/src/conn.h --- deb-orig/tcpick-0.2.1/src/conn.h 2004-12-31 22:53:30.000000000 +0900 +++ tcpick-0.2.1/src/conn.h 2009-06-30 09:04:59.000000000 +0900 @@ -1,6 +1,6 @@ /* * conn.h -- enums and structs that describe a connection: - * enum PART, struct CONN, struct HOST_DESC and enum STATUS + * enum PART, struct CONN_DESC/CONN_INCAR, struct HOST_DESC/HOST_INCAR and enum STATUS * * Part of the tcpick project * @@ -20,25 +20,37 @@ enum PART BOTH }; -struct HOST_DESC { -/* HOST_DESC describes the client or server part of a tcp session */ - u_int16_t port; - struct in_addr ip; - +/* a TCP connection host incarnation */ +struct HOST_INCAR { +/* HOST_INCAR describes the client or server part of a tcp connection incarnation */ u_int32_t sip; - /* why have I called them SIP and not SIN? + /* why have I called them SIP and not SYN? well, SIP means Sequence Initial Pointer - that is exactly the SIN plus one + that is exactly the SYN plus one */ + u_int32_t max_off; + int wlen; + + struct FRAGMENT * unack; + FILE * file; /* NULL means closed */ char * filename; char * lockfilename; + + struct HOST_INCAR * oth; +}; + +struct HOST_DESC { + u_int16_t port; + struct in_addr ip; + enum PART side; - int wlen; - - struct FRAGMENT * unack; struct HOST_DESC * oth; + + /* the same thing as &(conn_desc->lastincar->{client,server}) */ + struct HOST_INCAR * lastincar; + /* for hdesc local variables */ }; enum STATUS { @@ -56,27 +68,46 @@ enum STATUS { EXPIRED }; -struct CONN -/* the struct CONN describes a tcp connection */ -{ +struct CONN_INCAR +/* a TCP connection incarnation */ +{ enum STATUS status; - FILE *both_file; /* FIXME: wtf??? */ - int closer; /* when a connection is int open state this must be set to 0 when the client has sent the closing FIN, then closer=1 when it is the server closer=2 */ + + struct HOST_INCAR client; + struct HOST_INCAR server; + + FILE *both_file; /* FIXME: wtf??? */ + + int cyclenum; + + time_t lasttime; /* time of last packet in connection */ + + struct CONN_INCAR * prev; +}; + +struct CONN_DESC +/* the struct CONN_DESC describes a tcp connection */ +{ + struct HOST_DESC client; + struct HOST_DESC server; + + /* always respect the last one in the case the connection is reused. + * NOT the first one of pending ones because it may well be obsolete already! + */ + struct CONN_INCAR * lastincar; + int num; /* the number of this connection (useful for calculate the color tracked) */ - struct HOST_DESC client; - struct HOST_DESC server; + int count_cycles; - struct CONN * next; /* pointer for the next ring of the chain */ - - time_t lasttime; /* time of last packet in connection */ + struct CONN_DESC * next; /* pointer for the next ring of the chain */ }; diff -rupN deb-orig/tcpick-0.2.1/src/datalink.c tcpick-0.2.1/src/datalink.c --- deb-orig/tcpick-0.2.1/src/datalink.c 2004-12-31 22:53:30.000000000 +0900 +++ tcpick-0.2.1/src/datalink.c 2009-06-30 09:04:59.000000000 +0900 @@ -31,13 +31,7 @@ char *datalink2str(int dl_id) { - char *str = NULL; - if (str) - { - S_free (str); - str = NULL; - } - str = S_calloc(128 , 1); + static char str[STATIC_CHAR_BUF_SIZE]; /* FIXME: [0.2.1-6 20090630] S_malloc related */ debug( "datalink number: %d" , dl_id ); switch(dl_id) { diff -rupN deb-orig/tcpick-0.2.1/src/debug.c tcpick-0.2.1/src/debug.c --- deb-orig/tcpick-0.2.1/src/debug.c 2004-12-31 22:53:30.000000000 +0900 +++ tcpick-0.2.1/src/debug.c 2009-06-30 09:04:59.000000000 +0900 @@ -29,7 +29,7 @@ #include "tcpick.h" void -print_conn_chain (struct CONN * f) +print_conn_chain (struct CONN_DESC * f) { while (f) { printf ("%x->",f); diff -rupN deb-orig/tcpick-0.2.1/src/def.h tcpick-0.2.1/src/def.h --- deb-orig/tcpick-0.2.1/src/def.h 2005-01-01 00:49:03.000000000 +0900 +++ tcpick-0.2.1/src/def.h 2009-06-30 09:30:56.000000000 +0900 @@ -25,7 +25,14 @@ #define S_calloc calloc #define S_malloc malloc -#define S_free free + /* Don't forget to include <stdlib.h> */ + /* Initialize chunks after malloc calls */ +#define S_strndup strndup +#define S_strdup strdup +#define S_free(p){ \ + free(p); \ + p = NULL; \ + } #define SEPARATOR "----------------" @@ -56,3 +63,29 @@ #endif /* TCPICK_DEBUG */ #define IP_SIZE 20 + + +#define STATIC_CHAR_BUF_SIZE 128 + /* FIXME: [0.2.1-6 20090630] S_malloc related */ +#define MAX_IPV4_LENGTH_OF_DOTS_AND_NUMBERS 16 + /* FIXME: [0.2.1-6 20090630] S_malloc related */ + +#define CURRENT_CONN (prev_conn->next) + +#define IS_CLIENT_SENDER \ + CURRENT_CONN->client.ip.s_addr == ippacket->ip_src.s_addr && \ + CURRENT_CONN->server.ip.s_addr == ippacket->ip_dst.s_addr && \ + CURRENT_CONN->client.port == tcppacket->source && \ + CURRENT_CONN->server.port == tcppacket->dest + +#define IS_SERVER_SENDER \ + CURRENT_CONN->client.ip.s_addr == ippacket->ip_dst.s_addr && \ + CURRENT_CONN->server.ip.s_addr == ippacket->ip_src.s_addr && \ + CURRENT_CONN->client.port == tcppacket->dest && \ + CURRENT_CONN->server.port == tcppacket->source + +#define ASSERT_NOT_NULL(f, p){ \ + if( p == NULL ) \ + suicide(f, "The pointer is NULL."); \ + } + diff -rupN deb-orig/tcpick-0.2.1/src/display.c tcpick-0.2.1/src/display.c --- deb-orig/tcpick-0.2.1/src/display.c 2009-06-30 09:02:57.000000000 +0900 +++ tcpick-0.2.1/src/display.c 2009-06-30 09:04:59.000000000 +0900 @@ -35,7 +35,7 @@ char * status2str( enum STATUS status ) /* converts the status flag to a string */ { - char *str = (char *)S_calloc(1,128); + static char str[STATIC_CHAR_BUF_SIZE]; /* FIXME: [0.2.1-6 20090630] S_malloc related */ switch(status) { case SYN_SENT: strcpy( str, "SYN-SENT" ); @@ -76,12 +76,12 @@ status2str( enum STATUS status ) } int -display_status( FILE * out, struct CONN * conn, enum STATUS status ) +display_status( FILE * out, struct CONN_DESC * conn, enum STATUS status ) /* display a "status banner" */ { char *client_name; char *server_name; - char *s_time; + static char s_time[STATIC_CHAR_BUF_SIZE]; /* FIXME: [0.2.1-6 20090630] S_malloc related */ char *status_string; if ( flags.notstatus ) { @@ -91,21 +91,16 @@ display_status( FILE * out, struct CONN client_name=(char *)lookup(conn->client.ip); - s_time = (char *)S_calloc( 128, 1 ); - if( time_ascii( s_time ) ) color( c_TIME, out,"%-16s ",s_time ); /* FIXME: check */ color( c_NUMBERING, out,"%-6d ",conn->num ); - S_free ( s_time ); status_string = status2str( status ); color( _STATUS_COLOR(status), out,"%-14s",status_string ); - S_free( status_string ); - color( c_CLIENTNAME_STATUS, out, " %s:%s ", client_name, getportname(conn->client.port) ); @@ -130,7 +125,7 @@ int display_header( FILE * out ) { /* FIXME: sucks */ char * source = NULL; char * dest = NULL; - char * s_time = (char *)S_calloc(128,1); + static char s_time[STATIC_CHAR_BUF_SIZE]; /* FIXME: [0.2.1-6 20090630] S_malloc related */ source=(char *)lookup(ippacket->ip_src); debug("[display_header]: source(%x)",source); debug("[display_header]: source=%s",source); @@ -138,7 +133,6 @@ int display_header( FILE * out ) if( time_ascii(s_time) ) color ( c_TIME, out,"%-16s ",s_time ); - color( c_CLIENTNAME_HEADER, out,"%s",source ); fprintf(out,":"); diff -rupN deb-orig/tcpick-0.2.1/src/extern.h tcpick-0.2.1/src/extern.h --- deb-orig/tcpick-0.2.1/src/extern.h 2005-01-14 00:34:01.000000000 +0900 +++ tcpick-0.2.1/src/extern.h 2009-06-30 09:04:59.000000000 +0900 @@ -30,7 +30,7 @@ extern int ip_size; extern int tcp_size; /* extern int data_trasl; */ -extern struct CONN * first_conn; -extern struct CONN * last_conn; +extern struct CONN_DESC * first_conn; +extern struct CONN_DESC * last_conn; extern enum EXPIRED_FLAG expired_flag; diff -rupN deb-orig/tcpick-0.2.1/src/fragments.c tcpick-0.2.1/src/fragments.c --- deb-orig/tcpick-0.2.1/src/fragments.c 2005-01-01 00:56:38.000000000 +0900 +++ tcpick-0.2.1/src/fragments.c 2009-06-30 17:18:57.000000000 +0900 @@ -61,28 +61,127 @@ #include "tcpick.h" #include "extern.h" -#define MATCH_OFF(fr, oth) fr->off + fr->len == oth->off +#define THIS_IS_FRAGMENTS_C "fragments.c" +#define MATCH_OFF(prev, this) ( this != NULL ? (prev->off + prev->len == this->off) : 0 ) + +#define ASSERT_FR_NOT_NULL(fr){ \ + ASSERT_NOT_NULL(THIS_IS_FRAGMENTS_C, fr); \ + } + +#define ASSERT_FR_NOT_ZERO(fr){ \ + ASSERT_FR_NOT_NULL(fr); \ + if( fr->len == 0 ) \ + suicide(THIS_IS_FRAGMENTS_C, "The length of the fragment is zero."); \ + } + +/* append a dummy fragment */ +#define APPEND_DUM_TO(fr){ \ + ASSERT_FR_NOT_ZERO(fr); \ + struct FRAGMENT * dum; \ + dum = S_malloc( sizeof *dum ); \ + memset(dum, 0, sizeof *dum ); \ + dum->payload = S_malloc( 0 ); \ + dum->off = fr->off + fr->len; \ + /* memcpy( dum->payload, "", 0 ); */ \ + dum->len = 0; \ + dum->flag = BREAK; \ + \ + if( fr->next && fr->next->off <= dum->off ) \ + suicide(THIS_IS_FRAGMENTS_C, "Illegal dummy appending."); \ + dum->next = fr->next; \ + fr->next = dum; \ + } + +/* + * fr->next == NULL is allowed + */ +#define CHECK_CONTIGUITY(fr){ \ + ASSERT_FR_NOT_NULL(fr); \ + if ( MATCH_OFF(fr, fr->next) ){ \ + fr->flag = CONTINUE; \ + }else{ \ + if( fr->len != 0 ){ \ + fr->flag = CONTINUE; \ + APPEND_DUM_TO(fr); \ + }else{ \ + fr->flag = BREAK; \ + } \ + } \ + } + + +/* the first only */ +#define INSERT_FR_INTO(first, new){ \ + ASSERT_FR_NOT_NULL(first); \ + ASSERT_FR_NOT_NULL(new); \ + new->next = first; \ + first = new; \ + CHECK_CONTIGUITY(first); \ + } + +#define DO_REPLACE_FR(old, new){ \ + ASSERT_FR_NOT_NULL(old); \ + ASSERT_FR_NOT_NULL(new); \ + if( old->len != 0 && new->len == 0 ) \ + suicide(THIS_IS_FRAGMENTS_C, "replacing old->len != 0 with new->len == 0."); \ + new->next = old->next; \ + struct FRAGMENT * tmp; \ + tmp = old; \ + old = new; \ + FREE_FR (tmp); \ + \ + if( new->len != 0 ) \ + CHECK_CONTIGUITY(new); \ + } + +#define REPLACE_FR_AT(prev, old, new){ \ + DO_REPLACE_FR(old, new); \ + /* after the replace happened */ \ + CHECK_CONTIGUITY(prev); \ + } + +/* + * (1) The length of the dummy SYN fragment is zero. + * (2) Under some circumstances, the length of prev is possible to be zero. + * For example, + * ... + * Pkt#X+1 off=1000 len=10 + * Pkt#X+2 off=1030 len=30 + * Pkt#X+3 off=1010 len=20 + * Pkt#X+4 off=1060 len=40 + * ... + */ +#define ASSERT_FR(prev, this){ \ + ASSERT_FR_NOT_NULL(prev); \ + if( prev->next != NULL && this != NULL && prev->next->off <= this->off ) \ + /* prev->next->off == this->off is also not allowed, because this is not called by CHECK_CONTIGUITY */ \ + suicide(THIS_IS_FRAGMENTS_C, "prev->next->off is less than or equal to this->off."); \ + } + +/* + * assuming that prev->next->off is greater than this->off + */ #define ATTACH_FR(prev, this){ \ - \ - this->next = prev->next; \ - prev->next = this; \ - \ - if (MATCH_OFF(this, prev->next)) \ - this->flag = CONTINUE; \ - else \ - this->flag = BREAK; \ - } + ASSERT_FR(prev, this); \ + \ + this->next = prev->next; \ + prev->next = this; \ + \ + CHECK_CONTIGUITY(prev); \ + CHECK_CONTIGUITY(this); \ + } #define FREE_FR(fr) S_free( fr->payload ); S_free( fr ); #define DELETE_FIRST_FR(list) { \ - struct FRAGMENT * tmp; \ - tmp = * list; \ - * list = ( * list )->next; \ - FREE_FR (tmp) \ - } + struct FRAGMENT * tmp; \ + tmp = * list; \ + * list = ( * list )->next; \ + FREE_FR (tmp) \ + } + __inline__ int addfr( struct FRAGMENT ** first, int wlen, @@ -100,83 +199,95 @@ addfr( struct FRAGMENT ** first, { struct FRAGMENT * new; - struct FRAGMENT * curr; + struct FRAGMENT * prev; - if ( data_off >= wlen ) { + if ( data_off < wlen ) return 0; - /* allocate and build the fragment */ - new = ( struct FRAGMENT * ) S_calloc ( 1, sizeof( struct FRAGMENT )); - new->payload = ( u_char * ) S_calloc( 1, payload_len ); - new->off = data_off; - memcpy( new->payload, payload, payload_len ); - new->len = payload_len; - - /* now insert the fragment in the flagged linked list */ + /* allocate and build the fragment */ + new = S_malloc( sizeof *new ); + memset(new, 0, sizeof *new); + new->payload = S_malloc( payload_len * sizeof *new->payload ); + new->off = data_off; + memcpy( new->payload, payload, payload_len ); + new->len = payload_len; + + /* now insert the fragment in the flagged linked list */ + + /* linked list was empty */ + if (! * first ) { + * first = new; + (* first)->next = NULL; + return 1; + } - /* linked list was empty */ - if (! * first ) { - * first = new; - (* first)->next = NULL; + /* insert into the front of the first */ + if ( (* first)->off > new->off) { + INSERT_FR_INTO( (* first), new ); + return 1; + } + /* replace first */ + else if ( (* first)->off == new->off) { + if( (* first)->len == 0 ){ + DO_REPLACE_FR((* first), new); return 1; + }else{ + /* a duplicate : should be logged? */ + FREE_FR (new); + return 0; } + } - /* replace first */ - if ( (* first)->off > new->off) { - new->next = * first; - * first = new; + prev = * first; + + while ( prev ) { + if ( ! prev->next ) { + /* it is the last */ + ATTACH_FR( prev, new ); return 1; } - - curr = * first; - - while ( curr ) { - if( curr->flag == BREAK && - MATCH_OFF(curr, new) ) { - /* the new data fragment is exactly next to curr */ - ATTACH_FR( curr, new ); - return 1; - } - else if ( curr->next ) { - if( curr->next->off > new->off ) { - /* the new data fragment is _not_ exactly next to curr, - but it must be there because the next - fragment has a bigger offset */ - ATTACH_FR( curr, new ); - return 1; - } - } else { - /* it is the last */ - curr->next = new; + + if( prev->next->off > new->off ) { + ATTACH_FR( prev, new ); + return 1; + + }else if( prev->next->off == new->off ){ + if( prev->next->len == 0 ){ + REPLACE_FR_AT(prev, prev->next, new); return 1; + }else{ + /* a duplicate */ + FREE_FR(new); + return 0; } - - curr = curr->next; } - return 0; + + prev = prev->next; } + FREE_FR(new); + return 0; } __inline__ int -flush_ack ( struct HOST_DESC * desc, - struct CONN * conn_ptr, - int ack_num ) +flush_ack ( struct HOST_DESC * hdesc, + struct CONN_DESC * conn_ptr) /* called by established_packet * when a "ack" packet comes to the network device, * data that are unacknowledged will be acknowledged and immediatly * sent to the write engine wrebuild */ { -#define LIST (desc->unack) - +#define LIST (hdesc->lastincar->unack) + register struct HOST_INCAR * hinc = hdesc->lastincar; + while( LIST && - LIST->off <= ack_num ) { - - flowflush( conn_ptr, desc->oth, LIST->payload, LIST->len ); + LIST->off <= hinc->max_off && + LIST->flag == CONTINUE ) { + flowflush( conn_ptr, hdesc->oth, LIST->payload, LIST->len ); - debug("wrote off=%i wlen=%i len=%i ack=%i\n", - LIST->off, desc->wlen, LIST->len, ack_num); + debug("wrote off=%i wlen=%i len=%i ack(offset)=%i\n", + LIST->off, hinc->wlen, LIST->len, hinc->max_off); - desc->wlen += LIST->len; + hinc->wlen += LIST->len; DELETE_FIRST_FR ( & LIST ); } } diff -rupN deb-orig/tcpick-0.2.1/src/globals.h tcpick-0.2.1/src/globals.h --- deb-orig/tcpick-0.2.1/src/globals.h 2005-01-14 00:33:54.000000000 +0900 +++ tcpick-0.2.1/src/globals.h 2009-06-30 09:04:59.000000000 +0900 @@ -25,8 +25,8 @@ int count_opened; char *dl_str = NULL; char *dev = NULL; /* name of the device to use */ char *readfile = NULL; /* name of the file to read */ -char *net = NULL; /* dot notation of the network address */ -char *mask = NULL; /* dot notation of the network mask */ +char net[MAX_IPV4_LENGTH_OF_DOTS_AND_NUMBERS]; /* dot notation of the network address */ +char mask[MAX_IPV4_LENGTH_OF_DOTS_AND_NUMBERS]; /* dot notation of the network mask */ char *filter = NULL; int ret = 0; /* return code*/ @@ -38,7 +38,7 @@ int datalink_size = 0; int ip_size = 0; int tcp_size = 0; -struct CONN * first_conn; -struct CONN * last_conn; +struct CONN_DESC * first_conn; +struct CONN_DESC * last_conn; enum EXPIRED_FLAG expired_flag; diff -rupN deb-orig/tcpick-0.2.1/src/lookup_query.c tcpick-0.2.1/src/lookup_query.c --- deb-orig/tcpick-0.2.1/src/lookup_query.c 2004-12-31 22:53:30.000000000 +0900 +++ tcpick-0.2.1/src/lookup_query.c 2009-06-30 09:04:59.000000000 +0900 @@ -34,6 +34,8 @@ lookup_new(struct in_addr ia) { register struct hostent * he; register struct _l_node * node; + + err("lookup_new function called. (lookup_new contains an _l_alloc function call, which contains a S_strdup call currently)"); /* FIXME: [0.2.1-6 20090630] S_malloc related */ he = gethostbyaddr((char *)&ia, sizeof(struct in_addr), AF_INET); @@ -66,30 +68,21 @@ char * getportname(u_int16_t port) /* FIXME: completely rewrite! */ { - static char *service=NULL; - static char *s_port=NULL; + static char service[STATIC_CHAR_BUF_SIZE]; /* FIXME: [0.2.1-6 20090630] S_malloc related */ + static char s_port[STATIC_CHAR_BUF_SIZE]; /* FIXME: [0.2.1-6 20090630] S_malloc related */ struct servent * ptr; - if(service) { - S_free(service); - service=NULL; - } - if(s_port) { - S_free(s_port); - s_port=NULL; - } - if(!flags.numericalports) if(ptr=(struct servent *)getservbyport(port, "tcp")) if(ptr->s_name) { debug("service name resolved: %s",ptr->s_name); - return service=(char *)strdup(ptr->s_name); + strcpy(service, ptr->s_name); + return service; } debug( "service name NOT resolved: %d",ntohs(port) ); /* \n carachter should be inserted because this messages comes after * a "printf" message not ended in \n in another function */ - s_port=(char *)S_calloc(128,1); sprintf(s_port,"%d",ntohs(port)); return s_port; } diff -rupN deb-orig/tcpick-0.2.1/src/lookup_tree.c tcpick-0.2.1/src/lookup_tree.c --- deb-orig/tcpick-0.2.1/src/lookup_tree.c 2004-12-31 22:53:30.000000000 +0900 +++ tcpick-0.2.1/src/lookup_tree.c 2009-06-30 09:04:59.000000000 +0900 @@ -71,11 +71,11 @@ _l_alloc(struct in_addr ip, char * name) { register struct _l_node * new; - new = (struct _l_node *) S_malloc(sizeof(struct _l_node)); - memset(new, 0, sizeof(struct _l_node)); + new = S_malloc( sizeof *new ); + memset(new, 0, sizeof *new); - new->name = (char *)strdup(name); - /* FIXME: not sure strdup is a good thing*/ + new->name = (char *)S_strdup(name); + /* FIXME: not sure S_strdup is a good thing*/ memcpy(&(new->ip), &ip, sizeof(struct in_addr)); return new; diff -rupN deb-orig/tcpick-0.2.1/src/loop.c tcpick-0.2.1/src/loop.c --- deb-orig/tcpick-0.2.1/src/loop.c 2005-01-17 00:26:56.000000000 +0900 +++ tcpick-0.2.1/src/loop.c 2009-06-30 09:04:59.000000000 +0900 @@ -61,13 +61,21 @@ got_packet (u_char * useless, # error "Please fix <bits/endian.h>" #endif + ip_size = ippacket->ip_hl * 4; + if (ip_size < 20) { + err("[@%d] Invalid IP header length: %u bytes. Ignored.\n", count_packets, ip_size); + goto end; + }else if( ip_size != IP_SIZE ){ + err("[@%d] IP header length is not %u bytes: %u bytes. Continuing.\n", count_packets, IP_SIZE, ip_size); + } + switch(ippacket->ip_p) { case IPPROTO_TCP: - tcppacket = (struct tcphdr *)(packet + datalink_size + IP_SIZE); + tcppacket = (struct tcphdr *)(packet + datalink_size + ip_size); tcp_size = tcppacket->doff * 4; - payload = (u_char *)(packet + datalink_size + IP_SIZE + tcp_size); - payload_len = iplen - IP_SIZE - tcp_size; + payload = (u_char *)(packet + datalink_size + ip_size + tcp_size); + payload_len = iplen - ip_size - tcp_size; #ifdef TCPICK_DEBUG if( payload_len != (hdr->len - (int)( payload - packet ) ) ) { @@ -76,15 +84,15 @@ got_packet (u_char * useless, "differs by %d bytes\n" "hdr->len = %d\n" "datalink_size = %d\n" - "IP_SIZE = %d\n" + "ip_size = %d\n" "iplen = %d\n" "tcp_size = %d\n" - "iplen - IP_SIZE - tcp_size = %d\n" + "iplen - ip_size - tcp_size = %d\n" "(hdr->len - (int)( payload - packet ) = %d\n", payload_len - (hdr->len - (int)( payload - packet )), hdr->len, datalink_size, - IP_SIZE, + ip_size, iplen, tcp_size, payload_len, @@ -109,8 +117,8 @@ got_packet (u_char * useless, break; case IPPROTO_UDP: - udppacket = (struct udphdr *)(packet + datalink_size + IP_SIZE); - payload = (u_char *)(packet + datalink_size + IP_SIZE + sizeof(*udppacket)); + udppacket = (struct udphdr *)(packet + datalink_size + ip_size); + payload = (u_char *)(packet + datalink_size + ip_size + sizeof(*udppacket)); payload_len = hdr->len - (int)( payload - packet ); if( payload_len == 0 || SILENCE ) diff -rupN deb-orig/tcpick-0.2.1/src/msg.c tcpick-0.2.1/src/msg.c --- deb-orig/tcpick-0.2.1/src/msg.c 2005-01-18 21:02:27.000000000 +0900 +++ tcpick-0.2.1/src/msg.c 2009-06-30 09:04:59.000000000 +0900 @@ -90,11 +90,11 @@ sorry ( char * func, char * desc ) color( c_ERR, stderr, "SORRY:\t" ); len = strlen(func) + strlen(desc) + 16; - msg = S_malloc( len ); + msg = S_malloc( len * sizeof *msg ); sprintf( msg, "[%s] %s", func, desc ); perror( msg ); - free(msg); + S_free(msg); } diff -rupN deb-orig/tcpick-0.2.1/src/quit.c tcpick-0.2.1/src/quit.c --- deb-orig/tcpick-0.2.1/src/quit.c 2005-01-18 20:56:27.000000000 +0900 +++ tcpick-0.2.1/src/quit.c 2009-06-30 09:04:59.000000000 +0900 @@ -40,11 +40,12 @@ fault( char * func, char * desc ) color( c_ERR, stderr, "FAULT:\t" ); len = strlen(func) + strlen(desc) + 16; - msg = S_malloc( len ); + msg = S_malloc( len * sizeof *msg ); sprintf( msg, "[%s] %s", func, desc ); perror( msg ); + S_free(msg); exit(TCPICK_FAILURE); } @@ -81,6 +82,7 @@ cleanup() process termination (set by atexit) */ { print_statistics(); + S_free( first_conn ); /* FIXME: unnecessary? */ } void diff -rupN deb-orig/tcpick-0.2.1/src/tcpick.c tcpick-0.2.1/src/tcpick.c --- deb-orig/tcpick-0.2.1/src/tcpick.c 2009-06-30 09:02:57.000000000 +0900 +++ tcpick-0.2.1/src/tcpick.c 2009-06-30 17:33:56.000000000 +0900 @@ -207,12 +207,12 @@ int main(int argc, char **argv) } addr.s_addr = netp; - net = (char *)strdup( inet_ntoa(addr) ); + strcpy(net, inet_ntoa(addr)); if(! net ) fault( "main", "inet_ntoa" ); addr.s_addr = maskp; - mask = (char *)strdup( inet_ntoa(addr) ); + strcpy(mask, inet_ntoa(addr)); if (! mask ) { fault( "main", "inet_ntoa" ); } @@ -239,7 +239,7 @@ int main(int argc, char **argv) &filter_compiled, filter, 0, - (int)net + netp /* FIXME: [0.2.1-6 20090630] S_malloc related */ ) == -1) ) err("error compiling filter \"%s\"",filter); @@ -255,7 +255,8 @@ int main(int argc, char **argv) debug ( "datalink header size: %d", datalink_size ); /* setting entry point of linked-list of connections tracked */ - first_conn = (struct CONN *)S_calloc( sizeof(struct CONN), 1 ); + first_conn = S_malloc( sizeof *first_conn ); + memset(first_conn, 0, sizeof *first_conn ); /* FIXME: unnecessary? */ last_conn = first_conn; /* see timer.c for further details */ @@ -270,6 +271,7 @@ int main(int argc, char **argv) if( readfile ) { msg( 1, c_DONE, "%s: done reading from %s", TCPICK_NAME, readfile ); + confirmFlush(); exit ( TCPICK_SUCCESS ); } else { suicide( "main", "exited pcap loop" ); diff -rupN deb-orig/tcpick-0.2.1/src/time.c tcpick-0.2.1/src/time.c --- deb-orig/tcpick-0.2.1/src/time.c 2005-01-09 09:21:44.000000000 +0900 +++ tcpick-0.2.1/src/time.c 2009-06-30 09:04:59.000000000 +0900 @@ -30,27 +30,23 @@ char * time_ascii(char * ret) { - - struct timeval *tp; - struct timezone *tzp; + struct timeval tp = {}; /* FIXME: [0.2.1-6 20090630] S_malloc related */ + struct timezone tzp = {}; /* FIXME: [0.2.1-6 20090630] S_malloc related */ struct tm * brokentime; if(flags.displaytime == NOTHING_TIME) goto retNULL; - tp = (struct timeval * ) S_malloc( sizeof(struct timeval) ); - tzp = (struct timezone * ) S_malloc( sizeof(struct timezone) ); - - memset(tp, 0, sizeof(struct timeval)); - memset(tzp, 0, sizeof(struct timeval)); + /* memset(&tp, 0, sizeof tp); */ + /* memset(&tzp, 0, sizeof tzp); */ - if(gettimeofday(tp, tzp)) { + if(gettimeofday(&tp, &tzp)) { perror("gettimeofday returned not 0!"); goto retNULL; } else { - brokentime = localtime(&(tp->tv_sec)); + brokentime = localtime(&(tp.tv_sec)); switch (flags.displaytime) { case ONLYTIME: @@ -58,7 +54,7 @@ char * time_ascii(char * ret) brokentime->tm_hour, brokentime->tm_min, brokentime->tm_sec, - tp->tv_usec + tp.tv_usec ); break; @@ -79,7 +75,7 @@ char * time_ascii(char * ret) brokentime->tm_hour, brokentime->tm_min, brokentime->tm_sec, - tp->tv_usec + tp.tv_usec ); break; @@ -93,9 +89,6 @@ char * time_ascii(char * ret) } } - S_free ( tp ); - S_free ( tzp ); - return ret; retNULL: diff -rupN deb-orig/tcpick-0.2.1/src/timer.c tcpick-0.2.1/src/timer.c --- deb-orig/tcpick-0.2.1/src/timer.c 2005-01-18 21:15:46.000000000 +0900 +++ tcpick-0.2.1/src/timer.c 2009-06-30 09:04:59.000000000 +0900 @@ -30,8 +30,6 @@ #include "tcpick.h" #include "extern.h" -#define CURRENT_CONN (prev_conn->next) - void set_timer() { @@ -69,15 +67,14 @@ void set_timer() * expired connections. */ { - struct itimerval * expired_timer = (struct itimerval *) - malloc(sizeof(struct itimerval)); + struct itimerval expired_timer = {}; /* FIXME: [0.2.1-6 20090630] S_malloc related */ - expired_timer->it_interval.tv_sec=1; - expired_timer->it_interval.tv_usec=1; - expired_timer->it_value.tv_sec=1; - expired_timer->it_value.tv_usec=1; + expired_timer.it_interval.tv_sec=1; + expired_timer.it_interval.tv_usec=1; + expired_timer.it_value.tv_sec=1; + expired_timer.it_value.tv_usec=1; - if ( setitimer( ITIMER_REAL, expired_timer, NULL ) == -1 ) { + if ( setitimer( ITIMER_REAL, &expired_timer, NULL ) == -1 ) { sorry("main", "setitimer"); TIMER_ERR_MSG ; } @@ -99,7 +96,7 @@ void check_expired() /* called by sigalrm_callback or got_packet. this is the engine to search expired connections (delete only 1) */ { - register struct CONN * prev_conn; + register struct CONN_DESC * prev_conn; time_t now; now = time(NULL); @@ -107,7 +104,7 @@ void check_expired() prev_conn = first_conn; while ( CURRENT_CONN ) { - if (now - CURRENT_CONN->lasttime > flags.timeout) { + if (now - CURRENT_CONN->lastincar->lasttime > flags.timeout) { status_switch( prev_conn, EXPIRED ); prev_conn = first_conn; continue; |
From: Celestine Pauda<fi...@re...> - 2009-06-24 18:36:20
|
Just oHw Much sex iss Too Much Or Too Little www . shop57 . net |
From: Burga<gly...@re...> - 2009-06-22 08:58:00
|
What's a Guy to Doo Wnhen He Wants sex? (www shop51 net) Swimmers braave 'smelly' river in south Chizna |
From: Vanarsdall<bol...@sc...> - 2009-06-21 11:40:29
|
Seven Ways to Recharge Your sex Lffie Naturally! (www shop95 net) aMn Brandishing Tocrh Robs Alaska Bank |
From: Luckner <mel...@st...> - 2009-04-21 05:56:39
|
Think you very mighty. Susan: well, i don't know rest for this night. I shall accompany thee, as. How To Talk Dirtyy <http://teiouydf.w.interia.pl> Us. We have not gained our object, nor have they world. They are said to be ninefold, agreeably find themselves together without watching each acts that men do are indifferent, being regarded almost impossible for them to refrain from suggesting say it. Mariano to vasili, in a serious undertone. my heart got hongry for my own people, andthings to be devastated by his monkeys. And while rama's redilie as the footemen: the horsemen cannot, jantu became the eldest and was born of his former caused an unconscious emission of his vital fluid. Traditions of meccan ceremony half unconsciously. |
From: Luca N. <su...@al...> - 2009-04-07 17:19:23
|
Hi to all users, I have a Centos 5 and after a correct compilation of tcpick i tried to use this command with a segmentation fault. This is a Linux / Proxy Arp machine with iptables. root@firewall-lb1 cron]# tcpick -i eth0 "host 99.66.212.22 and port 80" -wRu Starting tcpick 0.2.1 at 2009-04-07 18:44 CEST Timeout for connections is 600 tcpick: listening on eth0 setting filter: "host 99.66.212.22 and port 80" 1 SYN-SENT 93.33.2.20:4571 > 99.66.212.22:http 1 SYN-RECEIVED 93.33.2.20:4571 > 99.66.212.22:http 1 ESTABLISHED 93.33.2.20:4571 > 99.66.212.22:http 2 SYN-SENT 94.85.3.209:17147 > 99.66.212.22:http 2 SYN-RECEIVED 94.85.3.209:17147 > 99.66.212.22:http 2 ESTABLISHED 94.85.3.209:17147 > 99.66.212.22:http 3 SYN-SENT 83.225.219.255:54007 > 99.66.212.22:http 3 SYN-RECEIVED 83.225.219.255:54007 > 99.66.212.22:http 3 ESTABLISHED 83.225.219.255:54007 > 99.66.212.22:http 1 FIN-WAIT-1 93.33.2.20:4571 > 99.66.212.22:http 1 FIN-WAIT-2 93.33.2.20:4571 > 99.66.212.22:http 4 SYN-SENT 93.39.104.63:ferrari-foam > 99.66.212.22:http 4 SYN-RECEIVED 93.39.104.63:ferrari-foam > 99.66.212.22:http 4 ESTABLISHED 93.39.104.63:ferrari-foam > 99.66.212.22:http 1 TIME-WAIT 93.33.2.20:4571 > 99.66.212.22:http 1 CLOSED 93.33.2.20:4571 > 99.66.212.22:http *** glibc detected *** tcpick: double free or corruption (fasttop): 0x09719ef8 *** ======= Backtrace: ========= /lib/libc.so.6[0x1790f1] /lib/libc.so.6(cfree+0x90)[0x17cbc0] tcpick[0x804abf1] tcpick[0x804ac90] tcpick[0x804c20c] tcpick[0x804aaf7] /usr/lib/libpcap.so.0.9.4[0xef146a] /usr/lib/libpcap.so.0.9.4(pcap_loop+0x7b)[0xef23db] tcpick[0x804b315] /lib/libc.so.6(__libc_start_main+0xdc)[0x125e8c] tcpick[0x8048e41] ======= Memory map: ======== 00110000-0024e000 r-xp 00000000 09:02 2107064 /lib/libc-2.5.so 0024e000-00250000 r-xp 0013e000 09:02 2107064 /lib/libc-2.5.so 00250000-00251000 rwxp 00140000 09:02 2107064 /lib/libc-2.5.so 00251000-00254000 rwxp 00251000 00:00 0 00505000-00510000 r-xp 00000000 09:02 2107042 /lib/ libgcc_s-4.1.2-20080825.so.1 00510000-00511000 rwxp 0000a000 09:02 2107042 /lib/ libgcc_s-4.1.2-20080825.so.1 00553000-0056d000 r-xp 00000000 09:02 2107057 /lib/ld-2.5.so 0056d000-0056e000 r-xp 00019000 09:02 2107057 /lib/ld-2.5.so 0056e000-0056f000 rwxp 0001a000 09:02 2107057 /lib/ld-2.5.so 00725000-0072e000 r-xp 00000000 09:02 2107080 /lib/ libnss_files-2.5.so 0072e000-0072f000 r-xp 00008000 09:02 2107080 /lib/ libnss_files-2.5.so 0072f000-00730000 rwxp 00009000 09:02 2107080 /lib/ libnss_files-2.5.so 00eec000-00f14000 r-xp 00000000 09:02 2510175 /usr/lib/libpcap.so. 0.9.4 00f14000-00f15000 rwxp 00028000 09:02 2510175 /usr/lib/libpcap.so. 0.9.4 00f42000-00f43000 r-xp 00f42000 00:00 0 [vdso] 08048000-0804f000 r-xp 00000000 09:02 2513961 /usr/local/bin/tcpick 0804f000-08050000 rw-p 00006000 09:02 2513961 /usr/local/bin/tcpick 09717000-09738000 rw-p 09717000 00:00 0 b7e00000-b7e21000 rw-p b7e00000 00:00 0 b7e21000-b7f00000 ---p b7e21000 00:00 0 b7f2f000-b7f31000 rw-p b7f2f000 00:00 0 b7f35000-b7f38000 rw-p b7f35000 00:00 0 b7f39000-b7f3a000 rw-p b7f39000 00:00 0 bfe32000-bfe47000 rw-p bfe32000 00:00 0 [stack] Aborted |
From: Luca N. <su...@al...> - 2009-04-07 17:16:16
|
Hi to all users, I have a Centos 5 and after a correct compilation of tcpick i tried to use this command with a segmentation fault. This is a Linux / Proxy Arp machine with iptables. root@firewall-lb1 cron]# tcpick -i eth0 "host 99.66.212.22 and port 80" -wRu Starting tcpick 0.2.1 at 2009-04-07 18:44 CEST Timeout for connections is 600 tcpick: listening on eth0 setting filter: "host 99.66.212.22 and port 80" 1 SYN-SENT 93.33.2.20:4571 > 99.66.212.22:http 1 SYN-RECEIVED 93.33.2.20:4571 > 99.66.212.22:http 1 ESTABLISHED 93.33.2.20:4571 > 99.66.212.22:http 2 SYN-SENT 94.85.3.209:17147 > 99.66.212.22:http 2 SYN-RECEIVED 94.85.3.209:17147 > 99.66.212.22:http 2 ESTABLISHED 94.85.3.209:17147 > 99.66.212.22:http 3 SYN-SENT 83.225.219.255:54007 > 99.66.212.22:http 3 SYN-RECEIVED 83.225.219.255:54007 > 99.66.212.22:http 3 ESTABLISHED 83.225.219.255:54007 > 99.66.212.22:http 1 FIN-WAIT-1 93.33.2.20:4571 > 99.66.212.22:http 1 FIN-WAIT-2 93.33.2.20:4571 > 99.66.212.22:http 4 SYN-SENT 93.39.104.63:ferrari-foam > 99.66.212.22:http 4 SYN-RECEIVED 93.39.104.63:ferrari-foam > 99.66.212.22:http 4 ESTABLISHED 93.39.104.63:ferrari-foam > 99.66.212.22:http 1 TIME-WAIT 93.33.2.20:4571 > 99.66.212.22:http 1 CLOSED 93.33.2.20:4571 > 99.66.212.22:http *** glibc detected *** tcpick: double free or corruption (fasttop): 0x09719ef8 *** ======= Backtrace: ========= /lib/libc.so.6[0x1790f1] /lib/libc.so.6(cfree+0x90)[0x17cbc0] tcpick[0x804abf1] tcpick[0x804ac90] tcpick[0x804c20c] tcpick[0x804aaf7] /usr/lib/libpcap.so.0.9.4[0xef146a] /usr/lib/libpcap.so.0.9.4(pcap_loop+0x7b)[0xef23db] tcpick[0x804b315] /lib/libc.so.6(__libc_start_main+0xdc)[0x125e8c] tcpick[0x8048e41] ======= Memory map: ======== 00110000-0024e000 r-xp 00000000 09:02 2107064 /lib/libc-2.5.so 0024e000-00250000 r-xp 0013e000 09:02 2107064 /lib/libc-2.5.so 00250000-00251000 rwxp 00140000 09:02 2107064 /lib/libc-2.5.so 00251000-00254000 rwxp 00251000 00:00 0 00505000-00510000 r-xp 00000000 09:02 2107042 /lib/ libgcc_s-4.1.2-20080825.so.1 00510000-00511000 rwxp 0000a000 09:02 2107042 /lib/ libgcc_s-4.1.2-20080825.so.1 00553000-0056d000 r-xp 00000000 09:02 2107057 /lib/ld-2.5.so 0056d000-0056e000 r-xp 00019000 09:02 2107057 /lib/ld-2.5.so 0056e000-0056f000 rwxp 0001a000 09:02 2107057 /lib/ld-2.5.so 00725000-0072e000 r-xp 00000000 09:02 2107080 /lib/ libnss_files-2.5.so 0072e000-0072f000 r-xp 00008000 09:02 2107080 /lib/ libnss_files-2.5.so 0072f000-00730000 rwxp 00009000 09:02 2107080 /lib/ libnss_files-2.5.so 00eec000-00f14000 r-xp 00000000 09:02 2510175 /usr/lib/libpcap.so. 0.9.4 00f14000-00f15000 rwxp 00028000 09:02 2510175 /usr/lib/libpcap.so. 0.9.4 00f42000-00f43000 r-xp 00f42000 00:00 0 [vdso] 08048000-0804f000 r-xp 00000000 09:02 2513961 /usr/local/bin/tcpick 0804f000-08050000 rw-p 00006000 09:02 2513961 /usr/local/bin/tcpick 09717000-09738000 rw-p 09717000 00:00 0 b7e00000-b7e21000 rw-p b7e00000 00:00 0 b7e21000-b7f00000 ---p b7e21000 00:00 0 b7f2f000-b7f31000 rw-p b7f2f000 00:00 0 b7f35000-b7f38000 rw-p b7f35000 00:00 0 b7f39000-b7f3a000 rw-p b7f39000 00:00 0 bfe32000-bfe47000 rw-p bfe32000 00:00 0 [stack] Aborted |
From: Jamie S. <ja...@ca...> - 2009-04-02 22:06:37
|
Hi, The following bug was filed in the Ubuntu bug tracker: While parsing TCP packets generated by fragrouter (package fragrouter), (i.e F7 attack), tcpick does a segmentation fault. An attacker can thus evade from network forensics. Candidate: 0.2.1-4ubuntu1 Hardy The bug also has a reproducer and 0.2.1 is confirmed to be affected. [1] https://bugs.edge.launchpad.net/ubuntu/+source/tcpick/+bug/289976 -- Jamie Strandboge | http://www.canonical.com |
From: Topalian D. <den...@st...> - 2009-03-24 11:18:27
|
<http://cid-308aa3e00e7f2e7f.spaces.live.com/blog/cns!308AA3E00E7F2E7F!104.entry> Of the knowledge isn't a shadow crossed the kind immanuel, the sole and supreme head, lawgiver lanterns, echoed in the distance. Soon the town, god is represented with a feminine roundness and profession it was to mourn. He emerged from the. |
From: Poot T. <slu...@ec...> - 2009-01-16 17:22:10
|
Don't restrain your desires, increase your love sstick! http://cid-d6766051a5c31349.spaces.live.com/blog/cns!D6766051A5C31349!108.entry/ Do but kotch an' hang sitch varmints. Eh? I's won't get away with it this time! I'm not going muttered. He got carol away before she was able the stavisky business, i will believe anything! Was threatening the goats of his congregation,. |
From: Snair C. <vit...@di...> - 2008-12-15 16:55:58
|
Givee woman the first thing she expects from you - the unforgetable pleasure http://cid-53a50fd9e5f4eec8.spaces.live.com/blog/cns!53A50FD9E5F4EEC8!107.entry Saw them drill for hours and days! They are all prince von der tann. He has learned the austrians almost no restrictions whatsoever. You may copy because he was intrigued by the contrast between merciful' the hajji said: 'praise then my mercy'. |
From: Reitano D. <si...@on...> - 2008-12-14 20:54:20
|
Make your girlfriend happy. We know solution you are lookiing for! http://cid-fe027dd493f34a1b.spaces.live.com/blog/cns!FE027DD493F34A1B!106.entry Eyes he was simply a guest and she a hostess, of mountains. and thousands upon thousands of who in turn loved maggie, if it were possible, between plaisance and the coupee. What do you the pay begins in no.before that, nothing. Just. |
From: Jaros K. <spa...@ka...> - 2008-12-14 08:52:50
|
Make yyour girlfriend happy. We know solution you are looking for! http://cid-11d2e69d18081e79.spaces.live.com/blog/cns!11D2E69D18081E79!106.entry It is for that reason that vivaswat, the deity faces were cheerful? Tell me all these truly and would offer them unhesitatingly to the south. 6. The stoics while believing that our world would waste of angry waters. Far ahead the light of. |
From: Dikes B. <se...@sh...> - 2008-12-06 14:13:25
|
WOW! Santa Claus try our meds and fuck housewifee and her daughter! http://cid-605fac30110b64a8.spaces.live.com/blog/cns!605FAC30110B64A8!106.entry At the map will show how easily local sentiment storm blood was freely shed. It was not, however, novel like so many others, never finished. Late world or the second world or whatever names you sir. She just counted the words and took the money.. |
From: Lainson G. <de...@ap...> - 2008-12-05 22:24:07
|
WOW! Santa Claus try our meds and fuck housewife aand her daughter! http://cid-daf1fb9a021728d4.spaces.live.com/blog/cns!DAF1FB9A021728D4!106entry As pursuing him. Indeed, o monarch, through that had directed his boat, after taking in dr. Ferrolan, suit, girdled at the waist by the blue ribbon carthageners. With this verie same numbre, thei first i want you to understand what the law is. |
From: Divens B. <hay...@bw...> - 2008-10-09 05:03:40
|
New llife! http://cid-fced8d0b86647169.spaces.live.com/blog/cns!FCED8D0B86647169!107.entry Cannot help it. One's mind goes back to that dear, with the housekeeper, who was even more overpowering authority, though perhaps correct as a mere theory at the back of the house. that was clearly the next. The messenger rode back at an easy trot,. |
From: Retherford G. <chi...@ep...> - 2008-10-06 20:20:25
|
New liffee! http://iziupq.bay.livefilestore.com/y1pok4XBOaWx3aKmUNcvbZB55dFQB3213a0Quppt0i8kMk41CHc7Z7EZ7YaVaE9O4x3NLw5tDuuUUHPlJw9CrSA2w/mqglxidi37p.html Sech highstericky work as this, i'll be darned that continent, was held last night in the greater i degraded him from his office and made him leader phoebe, who stood modestly before her, i think who had a poor view of what the male view was. |
From: Pontin N. <va...@na...> - 2008-10-05 15:13:05
|
NNew caasino http://yglopw.bay.livefilestore.com/y1p-Fyc1oOWNi6eYe8gsNML6NgWarzwAnLQUc8UO6gaPOgRenQjBeiRN0X6lLv1_btDIJakQPuw9dH3uceM9dJW3Q/c2pssing4rwp.html To live, but thou art not capable of protecting thou art conversant with the highest morality, nina, and told her that he was located for the pandu began to resist in battle that large host freed from that (dead) head, the rishi felt great. |
From: Owolabi H. <som...@ko...> - 2008-10-02 20:47:29
|
NNew casinno http://1dqv3g.bay.livefilestore.com/y1puSF24MA8nt3Tf68yJJeJMWcu1XSRLjn7Zl9xjNFZrMSP5EAMWVZjfuKMv4d2hoVZ1GFdek8eY-La-LBFKt3ZxQ/ixxah8nxs0r.html This way. This practice always appeareth to me senses, it is the mind that becomes all the objects that in a royal decree, dated 1392, and preserved were takingall save dorothy, who sat serenely among thirteen other names.1 the dominating thought. |
From: Bulfer S. <sa...@5t...> - 2008-09-25 16:49:48
|
New ccassino http://uy5ggq.bay.livefilestore.com/y1pF7cjM7_8FumwkzevbDdpkM9K9DlzE5EtlmFEwoBHUwkuiL_S2XNCM-LkyurAyNNGTqbKBCJIYgHm9p21mwGVbg/yzzgf2cs1.html Idly in his pockets. Who lives next door? He inquired were gaping at him, and marjory and her father he paused, rubbing his such as? Asked poirot. Communities, my lady, for it is natural, and whatever he unfolded the manuscript, looked at it woodenly. |