Annotation of embedaddon/hping2/listen.c, revision 1.1
1.1 ! misho 1: /*
! 2: * $smu-mark$
! 3: * $name: listen.c$
! 4: * $author: Salvatore Sanfilippo <antirez@invece.org>$
! 5: * $copyright: Copyright (C) 1999 by Salvatore Sanfilippo$
! 6: * $license: This software is under GPL version 2 of license$
! 7: * $date: Fri Nov 5 11:55:48 MET 1999$
! 8: * $rev: 8$
! 9: */
! 10:
! 11: #include <stdlib.h>
! 12: #include <stdio.h>
! 13: #include <string.h>
! 14: #include <unistd.h>
! 15: #include <sys/types.h>
! 16: #include <sys/socket.h>
! 17: #include <netinet/in.h>
! 18:
! 19: #include "hping2.h" /* hping2.h includes hcmp.h */
! 20: #include "globals.h"
! 21:
! 22: void listenmain(void)
! 23: {
! 24: int size, ip_size;
! 25: int stdoutFD = fileno(stdout);
! 26: char packet[IP_MAX_SIZE+linkhdr_size];
! 27: char *p, *ip_packet;
! 28: struct myiphdr ip;
! 29: __u16 id;
! 30: static __u16 exp_id; /* expected id */
! 31:
! 32: exp_id = 1;
! 33:
! 34: while(1) {
! 35: size = read_packet(packet, IP_MAX_SIZE+linkhdr_size);
! 36: switch(size) {
! 37: case 0:
! 38: continue;
! 39: case -1:
! 40: exit(1);
! 41: }
! 42:
! 43: /* Skip truncated packets */
! 44: if (size < linkhdr_size+IPHDR_SIZE)
! 45: continue;
! 46: ip_packet = packet + linkhdr_size;
! 47:
! 48: /* copy the ip header so it will be aligned */
! 49: memcpy(&ip, ip_packet, sizeof(ip));
! 50: id = ntohs(ip.id);
! 51: ip_size = ntohs(ip.tot_len);
! 52: if (size-linkhdr_size > ip_size)
! 53: size = ip_size;
! 54: else
! 55: size -= linkhdr_size;
! 56:
! 57: if ((p = memstr(ip_packet, sign, size))) {
! 58: if (opt_verbose)
! 59: fprintf(stderr, "packet %d received\n", id);
! 60:
! 61: if (opt_safe) {
! 62: if (id == exp_id)
! 63: exp_id++;
! 64: else {
! 65: if (opt_verbose)
! 66: fprintf(stderr, "packet not in sequence (id %d) received\n", id);
! 67: send_hcmp(HCMP_RESTART, exp_id);
! 68: if (opt_verbose)
! 69: fprintf(stderr, "HCMP restart from %d sent\n", exp_id);
! 70: continue; /* discard this packet */
! 71: }
! 72: }
! 73:
! 74: p+=strlen(sign);
! 75: write(stdoutFD, p, size-(p-ip_packet));
! 76: }
! 77: }
! 78: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>