pentoo-overlay/net-misc/tcpick/files/tcpick_0.2.1-shortpkts.patch
2014-01-14 01:01:29 +00:00

100 lines
3 KiB
Diff

diff -ur tcpick-0.2.1.org/src/extern.h tcpick-0.2.1/src/extern.h
--- tcpick-0.2.1.org/src/extern.h 2005-01-13 16:34:01.000000000 +0100
+++ tcpick-0.2.1/src/extern.h 2014-01-13 02:03:11.032836174 +0100
@@ -10,6 +10,7 @@
*/
/* FIXME: it seems written by a ogre */
+extern struct ether_header *etherpacket;
extern struct ip *ippacket;
extern struct tcphdr *tcppacket;
extern struct udphdr *udppacket;
diff -ur tcpick-0.2.1.org/src/globals.h tcpick-0.2.1/src/globals.h
--- tcpick-0.2.1.org/src/globals.h 2005-01-13 16:33:54.000000000 +0100
+++ tcpick-0.2.1/src/globals.h 2014-01-13 02:07:09.356161517 +0100
@@ -9,6 +9,7 @@
*
*/
+struct ether_header *etherpacket;
struct ip *ippacket;
struct tcphdr *tcppacket;
struct udphdr *udppacket;
diff -ur tcpick-0.2.1.org/src/loop.c tcpick-0.2.1/src/loop.c
--- tcpick-0.2.1.org/src/loop.c 2005-01-16 16:26:56.000000000 +0100
+++ tcpick-0.2.1/src/loop.c 2014-01-14 01:20:31.796544631 +0100
@@ -51,6 +51,18 @@
count_packets++;
+ if (hdr->caplen != hdr->len) {
+ debug("packet#%d: %d != %d!!! Don't have complete packet. Skipping.",
+ count_packets, hdr->caplen, hdr->len);
+ goto end;
+ }
+
+ etherpacket=(struct ether_header *) packet;
+ if (ntohs(etherpacket->ether_type) != ETHERTYPE_IP) {
+ debug("packet#%d: protocol is not IP. Skipping.", count_packets);
+ goto end;
+ }
+
ippacket=(struct ip *)(packet + datalink_size);
#if __BYTE_ORDER == __LITTLE_ENDIAN
@@ -69,9 +81,8 @@
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 ) ) ) {
- suicide( "got_packet",
+ /*suicide( "got_packet",
"payload lenght calculated with iplen and hdr->len\n"
"differs by %d bytes\n"
"hdr->len = %d\n"
@@ -90,9 +101,19 @@
payload_len,
(hdr->len - (int)( payload - packet ))
);
+ */
+ /* take as much as we have as payload :-( */
+ if (datalink_size + IP_SIZE + tcp_size < hdr->len) {
+ payload_len = hdr->len - datalink_size - IP_SIZE - tcp_size;
+ debug("packet#%d: %d < %d!!! Don't have complete TCP packet.",
+ count_packets-1, hdr->len, datalink_size + iplen);
+ } else {
+ debug(stdout, "packet#%d: %d < %d!!! Don't have TCP payload. Skipping.",
+ count_packets-1, hdr->len, datalink_size + iplen);
+ goto end;
+ }
}
-#endif /* TCPICK_DEBUG */
if( flags.header > 0 )
display_header( stdout, ippacket, tcppacket,
@@ -103,6 +124,11 @@
if( payload_len == 0 || SILENCE )
goto end;
+ if( payload_len < 0) {
+ debug("oops, got_packet bad payload length(TCP): %d", payload_len);
+ goto end;
+ }
+
out_flavour( flags.display_payload,
stdout, payload, payload_len );
@@ -116,6 +142,11 @@
if( payload_len == 0 || SILENCE )
goto end;
+ if( payload_len < 0) {
+ debug("oops, got_packet bad payload length(UDP): %d", payload_len);
+ goto end;
+ }
+
out_flavour( flags.display_payload,
stdout, payload, payload_len );