summaryrefslogtreecommitdiff
path: root/net/sniffit/patches/patch-aa
diff options
context:
space:
mode:
Diffstat (limited to 'net/sniffit/patches/patch-aa')
-rw-r--r--net/sniffit/patches/patch-aa216
1 files changed, 216 insertions, 0 deletions
diff --git a/net/sniffit/patches/patch-aa b/net/sniffit/patches/patch-aa
new file mode 100644
index 00000000000..59926bc6157
--- /dev/null
+++ b/net/sniffit/patches/patch-aa
@@ -0,0 +1,216 @@
+*** sn_defines.h Fri Apr 18 11:33:58 1997
+--- sn_defines.h Thu Jul 24 16:02:16 1997
+***************
+*** 80,90 ****
+ #define SYN 2
+ #define FIN 1
+
+! #define NO_IP 0
+! #define NO_IP_4 1000
+! #define ICMP 1 /* Protocol Numbers */
+! #define TCP 6
+! #define UDP 17
+
+ #define ICMP_HEADLENGTH 4 /* fixed ICMP header length */
+ #define UDP_HEADLENGTH 8 /* fixed UDP header length */
+--- 80,91 ----
+ #define SYN 2
+ #define FIN 1
+
+! #define NO_IP 0
+! #define NO_IP_4 1000
+! #define CORRUPT_IP 1001
+! #define ICMP 1 /* Protocol Numbers */
+! #define TCP 6
+! #define UDP 17
+
+ #define ICMP_HEADLENGTH 4 /* fixed ICMP header length */
+ #define UDP_HEADLENGTH 8 /* fixed UDP header length */
+*** sn_packets.c Fri Apr 18 11:33:58 1997
+--- sn_packets.c Thu Aug 22 19:18:51 1985
+***************
+*** 43,48 ****
+--- 43,49 ----
+ struct UDP_header UDPhead;
+
+ int i;
++ short int dummy; /* 2 bytes, important */
+
+ memcpy(&IPhead,(sp+PROTO_HEAD),sizeof(struct IP_header));
+ /* IP header Conversion */
+***************
+*** 51,56 ****
+--- 52,58 ----
+ unwrapped->TCP_len = 0; /* Reset structure NEEDED!!! */
+ unwrapped->UDP_len = 0;
+ unwrapped->DATA_len = 0;
++ unwrapped->FRAG_nf = 0;
+
+ if(NO_CHKSUM == 0)
+ {
+***************
+*** 75,106 ****
+ /* restore orig buffer */
+ /* general programming rule */
+ }
+ if(IPhead.protocol == TCP ) /* TCP */
+ {
+! memcpy(&TCPhead,(sp+PROTO_HEAD+(unwrapped->IP_len)),
+ sizeof(struct TCP_header));
+! unwrapped->TCP_len = ntohs(TCPhead.offset_flag) & 0xF000;
+! unwrapped->TCP_len >>= 10;
+! unwrapped->DATA_len = ntohs(IPhead.length) -
+ (unwrapped->IP_len) - (unwrapped->TCP_len);
+ return TCP;
+ }
+ if(IPhead.protocol == ICMP ) /* ICMP */
+ {
+! memcpy(&ICMPhead,(sp+PROTO_HEAD+(unwrapped->IP_len)),
+ sizeof(struct ICMP_header));
+! unwrapped->ICMP_len = ICMP_HEADLENGTH;
+! unwrapped->DATA_len = ntohs(IPhead.length) -
+ (unwrapped->IP_len) - (unwrapped->ICMP_len);
+! return ICMP;
+ }
+ if(IPhead.protocol == UDP ) /* UDP */
+ {
+! memcpy(&UDPhead,(sp+PROTO_HEAD+(unwrapped->IP_len)),
+ sizeof(struct UDP_header));
+! unwrapped->UDP_len = UDP_HEADLENGTH;
+! unwrapped->DATA_len = ntohs(IPhead.length) -
+ (unwrapped->IP_len) - (unwrapped->UDP_len);
+ return UDP;
+ }
+ return -1;
+--- 77,150 ----
+ /* restore orig buffer */
+ /* general programming rule */
+ }
++
++ #ifdef DEBUG_ONSCREEN
++ printf("IPheadlen: %d total length: %d\n", unwrapped->IP_len,
++ ntohs(IPhead.length));
++ #endif
++
++ dummy=ntohs(IPhead.flag_offset); dummy<<=3;
++ if( dummy!=0 ) /* we have offset */
++ {
++ unwrapped->FRAG_nf = 1;
++ }
++
+ if(IPhead.protocol == TCP ) /* TCP */
+ {
+! if(unwrapped->FRAG_nf == 0)
+! {
+! if( (ntohs(IPhead.length)-(unwrapped->IP_len))<20 )
+! {return CORRUPT_IP;};
+!
+! memcpy(&TCPhead,(sp+PROTO_HEAD+(unwrapped->IP_len)),
+ sizeof(struct TCP_header));
+! unwrapped->TCP_len = ntohs(TCPhead.offset_flag) & 0xF000;
+! unwrapped->TCP_len >>= 10;
+! unwrapped->DATA_len = ntohs(IPhead.length) -
+ (unwrapped->IP_len) - (unwrapped->TCP_len);
++ }
++ else
++ {
++ unwrapped->DATA_len = ntohs(IPhead.length) - (unwrapped->IP_len);
++ }
+ return TCP;
+ }
+ if(IPhead.protocol == ICMP ) /* ICMP */
+ {
+! if(unwrapped->FRAG_nf == 0)
+! {
+! if( (ntohs(IPhead.length)-(unwrapped->IP_len))<4 )
+! {return CORRUPT_IP;};
+!
+! memcpy(&ICMPhead,(sp+PROTO_HEAD+(unwrapped->IP_len)),
+ sizeof(struct ICMP_header));
+! unwrapped->ICMP_len = ICMP_HEADLENGTH;
+! unwrapped->DATA_len = ntohs(IPhead.length) -
+ (unwrapped->IP_len) - (unwrapped->ICMP_len);
+! return ICMP;
+! }
+! else
+! {
+! return -1; /* don't handle fragmented ICMP */
+! }
+ }
+ if(IPhead.protocol == UDP ) /* UDP */
+ {
+! if(unwrapped->FRAG_nf == 0)
+! {
+! if( (ntohs(IPhead.length)-(unwrapped->IP_len))<8 )
+! {return CORRUPT_IP;};
+!
+! memcpy(&UDPhead,(sp+PROTO_HEAD+(unwrapped->IP_len)),
+ sizeof(struct UDP_header));
+! unwrapped->UDP_len = UDP_HEADLENGTH;
+! unwrapped->DATA_len = ntohs(IPhead.length) -
+ (unwrapped->IP_len) - (unwrapped->UDP_len);
++ }
++ else
++ {
++ unwrapped->DATA_len = ntohs(IPhead.length)-(unwrapped->IP_len);
++ }
+ return UDP;
+ }
+ return -1;
+*** sn_packetstructs.h Fri Apr 18 11:33:58 1997
+--- sn_packetstructs.h Thu Jul 24 16:17:20 1997
+***************
+*** 44,51 ****
+ unsigned short length, checksum;
+ };
+
+! struct unwrap /* some extra info */
+ {
+ int IP_len, TCP_len, ICMP_len, UDP_len; /* header lengths */
+ int DATA_len;
+ };
+--- 44,52 ----
+ unsigned short length, checksum;
+ };
+
+! struct unwrap /* some extra info */
+ {
+ int IP_len, TCP_len, ICMP_len, UDP_len; /* header lengths */
+ int DATA_len;
++ char FRAG_nf; /* not the first fragment */
+ };
+*** sniffit.0.3.5.c Fri Apr 18 11:33:58 1997
+--- sniffit.0.3.5.c Thu Aug 22 19:19:49 1985
+***************
+*** 411,421 ****
+--- 411,427 ----
+ proto=unwrap_packet(sp, info);
+ if(proto == NO_IP) return DONT_EXAMINE; /* no use in trying */
+ if(proto == NO_IP_4) return DONT_EXAMINE; /* no use in trying */
++ if(proto == CORRUPT_IP)
++ {printf("Suspicious Packet detected... (Split header)\n");
++ return DONT_EXAMINE;}
+
+ memcpy(&iphead,(sp+PROTO_HEAD),sizeof(struct IP_header));
+ so=(unsigned char *)&(iphead.source);
+ dest=(unsigned char *)&(iphead.destination);
+
++ if(info->FRAG_nf!=0)
++ {printf("Fragment Skipped...\n"); return DONT_EXAMINE; };
++
+ if((proto==TCP)&&(PROTOCOLS&F_TCP))
+ {
+ #ifdef DEBUG_ONSCREEN
+***************
+*** 1220,1225 ****
+--- 1226,1235 ----
+ proto=unwrap_packet(sp, info);
+ if(proto == NO_IP) return DONT_EXAMINE; /* no use in trying */
+ if(proto == NO_IP_4) return DONT_EXAMINE; /* no use in trying */
++ if(proto == CORRUPT_IP) return DONT_EXAMINE; /* no use in trying */
++
++ if(info->FRAG_nf!=0)
++ {return DONT_EXAMINE; };
+
+ (*IP_nr_of_packets)++;
+ if(proto==ICMP)