summaryrefslogtreecommitdiff
path: root/net/driftnet/files/patch-driftnet.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/driftnet/files/patch-driftnet.c')
-rw-r--r--net/driftnet/files/patch-driftnet.c155
1 files changed, 155 insertions, 0 deletions
diff --git a/net/driftnet/files/patch-driftnet.c b/net/driftnet/files/patch-driftnet.c
new file mode 100644
index 000000000000..cab6c624b0a4
--- /dev/null
+++ b/net/driftnet/files/patch-driftnet.c
@@ -0,0 +1,155 @@
+$FreeBSD$
+
+--- driftnet.c.orig Tue Sep 11 11:34:56 2001
++++ driftnet.c Fri Mar 1 02:05:56 2002
+@@ -14,7 +14,9 @@
+ #include <assert.h>
+ #include <errno.h>
+ #include <pcap.h>
+-#include <linux/if_ether.h>
++#include <sys/types.h>
++#include <netinet/in_systm.h>
++#include <netinet/in.h>
+ #include <netinet/ip.h>
+ #include <netinet/tcp.h>
+ #include <stdlib.h>
+@@ -261,8 +263,8 @@
+ "Synopsis: driftnet -h | [-i interface] [-p] [-v] [filter code]\n"
+ "\n"
+ " -h Display this help message.\n"
+-" -i interface Select the interface on which to listen (default: all\n"
+-" interfaces).\n"
++" -i interface Select the interface on which to listen (default: first\n"
++" available interface).\n"
+ " -p Do not put the listening interface into promiscuous mode.\n"
+ " -v Verbose operation.\n"
+ "\n"
+@@ -293,7 +295,7 @@
+ void setup_signals(void) {
+ int *p;
+ /* Signals to ignore. */
+- int ignore_signals[] = {SIGPIPE, 0};
++ int ignore_signals[] = {SIGPIPE, SIGCONT, SIGHUP, 0};
+ /* Signals which mean we should quit, killing the display child if
+ * applicable. */
+ int terminate_signals[] = {SIGTERM, SIGINT, SIGSEGV, SIGBUS, SIGCHLD, 0};
+@@ -393,6 +395,15 @@
+ }
+ }
+
++ if (!interface) {
++ interface = pcap_lookupdev(ebuf);
++
++ if (!interface) {
++ fprintf(stderr, PROGNAME": pcap_lookupdev: %s\n", ebuf);
++ return -1;
++ }
++ }
++
+
+ if (verbose)
+ fprintf(stderr, PROGNAME": listening on %s%s\n", interface ? interface : "all interfaces", promisc ? " in promiscuous mode" : "");
+@@ -468,7 +479,7 @@
+ fprintf(stderr, PROGNAME": link-level header length is %d bytes\n", pkt_offset);
+
+ while (!foad) {
+- struct iphdr ip;
++ struct ip ip;
+ struct tcphdr tcp;
+ struct in_addr s, d;
+ int off, len;
+@@ -485,32 +496,32 @@
+ fprintf(stderr, "packet len = %d captured = %d!\n", hdr.len, hdr.caplen);
+ */
+ memcpy(&ip, pkt + pkt_offset, sizeof(ip));
+- memcpy(&s, &ip.saddr, sizeof(ip.saddr));
+- memcpy(&d, &ip.daddr, sizeof(ip.daddr));
++ memcpy(&s, &ip.ip_src, sizeof(ip.ip_src));
++ memcpy(&d, &ip.ip_dst, sizeof(ip.ip_dst));
+
+- memcpy(&tcp, pkt + pkt_offset + (ip.ihl << 2), sizeof(tcp));
+- off = pkt_offset + (ip.ihl << 2) + (tcp.doff << 2);
++ memcpy(&tcp, pkt + pkt_offset + (ip.ip_hl << 2), sizeof(tcp));
++ off = pkt_offset + (ip.ip_hl << 2) + (tcp.th_off << 2);
+ len = hdr.caplen - off;
+
+ /*
+ if (verbose)
+- fprintf(stderr, PROGNAME": captured packet: %s:%d -> %s:%d\n", inet_ntoa(s), ntohs(tcp.source), inet_ntoa(d), ntohs(tcp.dest));
++ fprintf(stderr, PROGNAME": captured packet: %s:%d -> %s:%d\n", inet_ntoa(s), ntohs(tcp.th_sport), inet_ntoa(d), ntohs(tcp.th_dport));
+ */
+
+ /* XXX fragmented packets and other nasties. */
+
+ /* try to find the connection slot associated with this. */
+- C = find_connection(&s, &d, ntohs(tcp.source), ntohs(tcp.dest));
++ C = find_connection(&s, &d, ntohs(tcp.th_sport), ntohs(tcp.th_dport));
+
+ /* no connection at all, so we need to allocate one. */
+ if (!C) {
+ if (verbose)
+- fprintf(stderr, PROGNAME": new connection: %s\n", connection_string(s, ntohs(tcp.source), d, ntohs(tcp.dest)));
++ fprintf(stderr, PROGNAME": new connection: %s\n", connection_string(s, ntohs(tcp.th_sport), d, ntohs(tcp.th_dport)));
+ C = alloc_connection();
+- *C = connection_new(&s, &d, ntohs(tcp.source), ntohs(tcp.dest));
++ *C = connection_new(&s, &d, ntohs(tcp.th_sport), ntohs(tcp.th_dport));
+ /* This might or might not be an entirely new connection (SYN flag
+ * set). Either way we need a sequence number to start at. */
+- (*C)->isn = ntohl(tcp.seq);
++ (*C)->isn = ntohl(tcp.th_seq);
+ }
+
+ /* Now we need to process this segment. */
+@@ -526,16 +537,16 @@
+ c->isn = htonl(tcp.seq);
+ #endif
+
+- if (tcp.rst) {
++ if (tcp.th_flags & TH_RST) {
+ /* Looks like this connection is bogus, and so might be a
+ * connection going the other way. */
+ if (verbose)
+- fprintf(stderr, PROGNAME": connection reset: %s\n", connection_string(s, ntohs(tcp.source), d, ntohs(tcp.dest)));
++ fprintf(stderr, PROGNAME": connection reset: %s\n", connection_string(s, ntohs(tcp.th_sport), d, ntohs(tcp.th_dport)));
+
+ connection_delete(c);
+ *C = NULL;
+
+- if ((C = find_connection(&d, &s, ntohs(tcp.dest), ntohs(tcp.source)))) {
++ if ((C = find_connection(&d, &s, ntohs(tcp.th_dport), ntohs(tcp.th_sport)))) {
+ connection_delete(*C);
+ *C = NULL;
+ }
+@@ -547,7 +558,7 @@
+ /* We have some data in the packet. If this data occurred after
+ * the first data we collected for this connection, then save it
+ * so that we can look for images. Otherwise, discard it. */
+- unsigned int offset = ntohl(tcp.seq);
++ unsigned int offset = ntohl(tcp.th_seq);
+
+ /* Modulo 2**32 arithmetic; offset = seq - isn + delta. */
+ if (offset < (c->isn + delta))
+@@ -558,19 +569,19 @@
+ if (offset > c->len + 262144) {
+ /* Out-of-order packet. */
+ if (verbose)
+- fprintf(stderr, PROGNAME": out of order packet: %s\n", connection_string(s, ntohs(tcp.source), d, ntohs(tcp.dest)));
++ fprintf(stderr, PROGNAME": out of order packet: %s\n", connection_string(s, ntohs(tcp.th_sport), d, ntohs(tcp.th_dport)));
+ } else {
+ /* if (verbose)
+- fprintf(stderr, PROGNAME": captured %d bytes: %s:%d -> %s:%d\n", (int)len, inet_ntoa(s), ntohs(tcp.source), inet_ntoa(d), ntohs(tcp.dest));*/
++ fprintf(stderr, PROGNAME": captured %d bytes: %s:%d -> %s:%d\n", (int)len, inet_ntoa(s), ntohs(tcp.th_sport), inet_ntoa(d), ntohs(tcp.th_dport));*/
+ connection_push(c, pkt + off, offset, len);
+ connection_harvest_images(c);
+ }
+ }
+
+- if (tcp.fin) {
++ if (tcp.th_flags & TH_FIN) {
+ /* Connection closing. */
+ if (verbose)
+- fprintf(stderr, PROGNAME": connection closing: %s, %d bytes transferred\n", connection_string(s, ntohs(tcp.source), d, ntohs(tcp.dest)), c->len);
++ fprintf(stderr, PROGNAME": connection closing: %s, %d bytes transferred\n", connection_string(s, ntohs(tcp.th_sport), d, ntohs(tcp.th_dport)), c->len);
+ connection_harvest_images(c);
+ connection_delete(c);
+ *C = NULL;