summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKyle K <kylek389@gmail.com>2011-11-24 01:01:56 -0600
committerKamil Kaminski <kamilkss@gmail.com>2011-11-24 01:01:56 -0600
commit6099c78436a93ab677d0cb35a815cdd55bad279b (patch)
tree548b27d3b21b29f3596db21efc9d0fd1fdbbef95
parent14dc3edb6bb28fbd1b82862f28917b135810d926 (diff)
downloadtcpflow-6099c78436a93ab677d0cb35a815cdd55bad279b.tar.gz
tcpflow-6099c78436a93ab677d0cb35a815cdd55bad279b.tar.bz2
tcpflow-6099c78436a93ab677d0cb35a815cdd55bad279b.zip
few cleanupsHEADmaster
-rw-r--r--tcpflow.c39
1 files changed, 13 insertions, 26 deletions
diff --git a/tcpflow.c b/tcpflow.c
index 5bbce43..998eb1c 100644
--- a/tcpflow.c
+++ b/tcpflow.c
@@ -37,10 +37,10 @@ struct tcpflow
tcp_seq initial_seq;
unsigned int packet_count, bytes_count;
int fd;
- struct tcpflow *next;
char ip_src_s[16];
char ip_dst_s[16];
- char session_fname[50];
+ char session_fname[64];
+ struct tcpflow *next;
};
typedef struct tcpflow tcpflow_t;
@@ -56,10 +56,6 @@ int check_session(tcpflow_t *list, struct in_addr ip_src, struct in_addr ip_dst,
if (iter->ip_src.s_addr == ip_src.s_addr && iter->ip_dst.s_addr == ip_dst.s_addr &&
iter->src_port == src_port && iter->dst_port == dst_port)
{
-#if 0
- printf("same session detected, session = %s, packets = %u, bytes = %u\n",
- iter->session_fname, iter->packet_count, iter->bytes_count);
-#endif
*session_ptr = iter;
return 0;
}
@@ -88,14 +84,14 @@ int add_session(tcpflow_t **list, struct ip *ip_pkt, struct tcphdr *tcp_pkt)
node->src_port = ntohs(tcp_pkt->th_sport);
node->dst_port = ntohs(tcp_pkt->th_dport);
node->initial_seq = ntohl(tcp_pkt->th_seq);
- node->bytes_count += ((ntohs(ip_pkt->ip_len) - 20 - (tcp_pkt->th_off * 4))); /* calc payload */
+ node->bytes_count += ((ntohs(ip_pkt->ip_len) - 20 - (tcp_pkt->th_off << 2))); /* calc payload */
strcpy(node->ip_src_s, inet_ntoa(ip_pkt->ip_src));
strcpy(node->ip_dst_s, inet_ntoa(ip_pkt->ip_dst));
- char buff[50] = { 0 };
+ char buff[64] = { 0 };
sprintf(buff, "%s.%u-%s.%u.logs", node->ip_src_s, node->src_port,
node->ip_dst_s, node->dst_port);
- strncpy(node->session_fname, buff, 50);
+ strncpy(node->session_fname, buff, 64);
/* open file for writing */
char fname[300] = { 0 };
@@ -103,13 +99,8 @@ int add_session(tcpflow_t **list, struct ip *ip_pkt, struct tcphdr *tcp_pkt)
if ((node->fd = open(fname, O_WRONLY | O_CREAT, 0644)) == -1)
perror("failed to create file for tcp session");
- if (!*list)
- *list = node;
- else
- {
- node->next = *list;
- *list = node;
- }
+ node->next = *list;
+ *list = node;
}
else
{
@@ -123,24 +114,21 @@ int add_session(tcpflow_t **list, struct ip *ip_pkt, struct tcphdr *tcp_pkt)
int cont_session(tcpflow_t *curr_session, struct ip *ip_pkt, struct tcphdr *tcp_pkt)
{
/* calc payload */
- unsigned int payload = (ntohs(ip_pkt->ip_len) - 20 - (tcp_pkt->th_off * 4));
+ unsigned int payload = (ntohs(ip_pkt->ip_len) - 20 - (tcp_pkt->th_off << 2));
if (!payload && (tcp_pkt->th_flags & TH_ACK)) /* silly to check for ACK flag? It's always set after handshake, eh */
{
- fprintf(stderr, "%s is ACKing\n", curr_session->ip_src_s); /* or possibly finishing a 3-way handshake */
+ /* or possibly finishing a 3-way handshake */
+ fprintf(stderr, "%s is ACKing\n", curr_session->ip_src_s);
return 0;
}
/* append payload, if any */
if (payload && curr_session->fd)
{
- void *payload_addr = ((char *) (tcp_pkt)) + tcp_pkt->th_off * 4;
-#if 0
- printf("tcp header is at: %p\n", tcp_pkt);
- printf("payload is at: %p and size = %u\n", payload_addr, payload);
-#endif
-
- lseek(curr_session->fd, ntohl(tcp_pkt->th_seq) - curr_session->initial_seq, SEEK_SET); /* seek to some offset from beginning */
+ void *payload_addr = ((char *) (tcp_pkt)) + (tcp_pkt->th_off << 2);
+ /* seek to some offset from beginning */
+ lseek(curr_session->fd, ntohl(tcp_pkt->th_seq) - curr_session->initial_seq, SEEK_SET);
write(curr_session->fd, payload_addr, payload);
curr_session->bytes_count += payload;
@@ -152,7 +140,6 @@ int cont_session(tcpflow_t *curr_session, struct ip *ip_pkt, struct tcphdr *tcp_
}
curr_session->packet_count++;
-
return 0;
}