summaryrefslogtreecommitdiffstats
path: root/lib/printpacket.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/printpacket.c')
-rw-r--r--lib/printpacket.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/lib/printpacket.c b/lib/printpacket.c
new file mode 100644
index 0000000..6ee3679
--- /dev/null
+++ b/lib/printpacket.c
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2000-2005 by Darren Reed.
+ *
+ * See the IPFILTER.LICENCE file for details on licencing.
+ *
+ * $Id: printpacket.c,v 1.12.4.5 2007/09/09 22:15:30 darrenr Exp $
+ */
+
+#include "ipf.h"
+
+#ifndef IP_OFFMASK
+# define IP_OFFMASK 0x3fff
+#endif
+
+
+void printpacket(ip)
+struct ip *ip;
+{
+ struct tcphdr *tcp;
+ u_short len;
+ u_short off;
+
+ if (IP_V(ip) == 6) {
+ off = 0;
+ len = ntohs(((u_short *)ip)[2]) + 40;
+ } else {
+ off = ntohs(ip->ip_off);
+ len = ntohs(ip->ip_len);
+ }
+
+ if ((opts & OPT_HEX) == OPT_HEX) {
+ u_char *s;
+ int i;
+
+ for (s = (u_char *)ip, i = 0; i < len; i++) {
+ printf("%02x", *s++ & 0xff);
+ if (len - i > 1) {
+ i++;
+ printf("%02x", *s++ & 0xff);
+ }
+ putchar(' ');
+ }
+ putchar('\n');
+ putchar('\n');
+ return;
+ }
+
+ if (IP_V(ip) == 6) {
+ printpacket6(ip);
+ return;
+ }
+
+ tcp = (struct tcphdr *)((char *)ip + (IP_HL(ip) << 2));
+ printf("ip #%d %d(%d) %d", ntohs(ip->ip_id), ntohs(ip->ip_len),
+ IP_HL(ip) << 2, ip->ip_p);
+ if (off & IP_OFFMASK)
+ printf(" @%d", (off & IP_OFFMASK) << 3);
+ printf(" %s", inet_ntoa(ip->ip_src));
+ if (!(off & IP_OFFMASK))
+ if (ip->ip_p == IPPROTO_TCP || ip->ip_p == IPPROTO_UDP)
+ printf(",%d", ntohs(tcp->th_sport));
+ printf(" > ");
+ printf("%s", inet_ntoa(ip->ip_dst));
+ if (!(off & IP_OFFMASK)) {
+ if (ip->ip_p == IPPROTO_TCP || ip->ip_p == IPPROTO_UDP)
+ printf(",%d", ntohs(tcp->th_dport));
+ if ((ip->ip_p == IPPROTO_TCP) && (tcp->th_flags != 0)) {
+ putchar(' ');
+ if (tcp->th_flags & TH_FIN)
+ putchar('F');
+ if (tcp->th_flags & TH_SYN)
+ putchar('S');
+ if (tcp->th_flags & TH_RST)
+ putchar('R');
+ if (tcp->th_flags & TH_PUSH)
+ putchar('P');
+ if (tcp->th_flags & TH_ACK)
+ putchar('A');
+ if (tcp->th_flags & TH_URG)
+ putchar('U');
+ if (tcp->th_flags & TH_ECN)
+ putchar('E');
+ if (tcp->th_flags & TH_CWR)
+ putchar('C');
+ }
+ }
+
+ putchar('\n');
+}
OpenPOWER on IntegriCloud