Δημοσιεύτηκε: 15 Μαρ 2012, 12:33
από utnubu
Συγνώμη παιδιά λάθος στο copy-paste.
Το payload δεν είναι null ο κώδικας μου έχει βασιστεί στο http://www.tcpdump.org/sniffex.c
Αυτό που θέλω είναι να διατρέξω το payload ενος sip πακέτου και να τραβήξω συγκεκριμένες πληροφορίες,γι'αυτό και κάνω χρήση της strtok που το κατακερματίζει.
Όποιος ανοίξει το αρχείο που παρατείθεται θα καταλάβει αμέσως τι παίζει.
Ο κώδικας που έχω ανεβάσει είναι ένα μικρό τμήμα(χρήση της strtok) στο οποίο και μου χτυπάει το πρόβλημα.

Μορφοποιημένος Κώδικας: Επιλογή όλων
char * payload;
int count=1;
udp = (struct sniff_udp*)(packet + SIZE_ETHERNET + SIZE_UDP);
size_payload = ntohs(ip->ip_len) - (size_ip + SIZE_UDP);

/* define computer udp payload (segment) offset */
payload = (u_char *)(packet + SIZE_ETHERNET + size_ip + SIZE_UDP);

char search_reg[]="REGISTER"; /* search for register method in payload */
char search_sip[]="Via: SIP"; /* variable to identify sip packet */


if (strstr(payload, search_sip))
{
/* compute udp payload (segment) size */
if (size_payload > ntohs(udp->uh_ulen))
{
size_payload = ntohs(udp->uh_ulen);
}
printf("\n SIP Packet number %d:\n", count);
count++;
int reg_method = 0; /* variable to identify sip method*/
if (strstr(payload, search_reg))
{
reg_method = 1; /* sip method is REGISTER*/
if ( reg_method==1)
printf("\n REGISTER METHOD \n");
}

if (size_payload > 0)
{
char * tch; /* Parsing pointer for strtok function */
char * from; /* "From" pointer */
char * contact; /* "Contact" pointer */
char * user; /* "User" pointer */
char * callid; /* "Call-ID" pointer */
tch = strtok (payload,"<>;\n\"");
while (tch != NULL)
{
if (strncmp(tch, "From",4)==0) /* Comparation of first 4 chars to "From" and if so collect it*/
{
tch = strtok (NULL, "<>;\n\"");
from = tch;
printf ("\n SIP From: %s \n", from);
}
if (strncmp(tch, "Contact",7)==0) /* Comparation of first 7 chars to "Contact" and if so collect it*/
{
tch = strtok (NULL, "<>;\n\"");
contact = tch;
printf (" SIP Contact: %s \n", contact);
}
if (strncmp(tch, "Authorization",13)==0) /* Comparation of first 13 chars to "Authorization" and if so collect it*/
{
tch = strtok (NULL, "<>;\n\"");
user = tch;
printf (" SIP User: %s \n", user);
}
if (strncmp(tch, "Call-ID",7)==0) /* Comparation of first 7 chars to "Call-ID" and if so collect it*/
{
callid = tch;
printf (" %s \n", callid);
}
tch = strtok (NULL, "<>;\n\"");
}