|
|
8f195e9 |
Patch by Gleb Paharenko <gpaharenko@gmail.com> for dsniff >= 2.4b1, which
|
|
|
8f195e9 |
adds checksum for libnids. For further information, please have a look to
|
|
|
8f195e9 |
Debian bug ID #420129.
|
|
|
8f195e9 |
|
|
|
8f195e9 |
--- dsniff-2.4b1/dsniff.c 2007-08-11 01:37:33.000000000 -0300
|
|
|
8f195e9 |
+++ dsniff-2.4b1/dsniff.c.checksum 2007-08-11 01:38:55.000000000 -0300
|
|
|
8f195e9 |
@@ -70,6 +70,80 @@
|
|
|
8f195e9 |
{
|
|
|
8f195e9 |
}
|
|
|
8f195e9 |
|
|
|
8f195e9 |
+
|
|
|
8f195e9 |
+static int get_all_ifaces(struct ifreq **, int *);
|
|
|
8f195e9 |
+static unsigned int get_addr_from_ifreq(struct ifreq *);
|
|
|
8f195e9 |
+
|
|
|
8f195e9 |
+int all_local_ipaddrs_chksum_disable()
|
|
|
8f195e9 |
+{
|
|
|
8f195e9 |
+ struct ifreq *ifaces;
|
|
|
8f195e9 |
+ int ifaces_count;
|
|
|
8f195e9 |
+ int i, ind = 0;
|
|
|
8f195e9 |
+ struct nids_chksum_ctl *ctlp;
|
|
|
8f195e9 |
+ unsigned int tmp;
|
|
|
8f195e9 |
+
|
|
|
8f195e9 |
+ if (!get_all_ifaces(&ifaces, &ifaces_count))
|
|
|
8f195e9 |
+ return -1;
|
|
|
8f195e9 |
+ ctlp =
|
|
|
8f195e9 |
+ (struct nids_chksum_ctl *) malloc(ifaces_count *
|
|
|
8f195e9 |
+ sizeof(struct
|
|
|
8f195e9 |
+ nids_chksum_ctl));
|
|
|
8f195e9 |
+ if (!ctlp)
|
|
|
8f195e9 |
+ return -1;
|
|
|
8f195e9 |
+ for (i = 0; i < ifaces_count; i++) {
|
|
|
8f195e9 |
+ tmp = get_addr_from_ifreq(ifaces + i);
|
|
|
8f195e9 |
+ if (tmp) {
|
|
|
8f195e9 |
+ ctlp[ind].netaddr = tmp;
|
|
|
8f195e9 |
+ ctlp[ind].mask = inet_addr("255.255.255.255");
|
|
|
8f195e9 |
+ ctlp[ind].action = NIDS_DONT_CHKSUM;
|
|
|
8f195e9 |
+ ind++;
|
|
|
8f195e9 |
+ }
|
|
|
8f195e9 |
+ }
|
|
|
8f195e9 |
+ free(ifaces);
|
|
|
8f195e9 |
+ nids_register_chksum_ctl(ctlp, ind);
|
|
|
8f195e9 |
+}
|
|
|
8f195e9 |
+
|
|
|
8f195e9 |
+/* helper functions for Example 2 */
|
|
|
8f195e9 |
+unsigned int get_addr_from_ifreq(struct ifreq *iface)
|
|
|
8f195e9 |
+{
|
|
|
8f195e9 |
+ if (iface->ifr_addr.sa_family == AF_INET)
|
|
|
8f195e9 |
+ return ((struct sockaddr_in *) &(iface->ifr_addr))->
|
|
|
8f195e9 |
+ sin_addr.s_addr;
|
|
|
8f195e9 |
+ return 0;
|
|
|
8f195e9 |
+}
|
|
|
8f195e9 |
+
|
|
|
8f195e9 |
+static int get_all_ifaces(struct ifreq **ifaces, int *count)
|
|
|
8f195e9 |
+{
|
|
|
8f195e9 |
+ int ifaces_size = 8 * sizeof(struct ifreq);
|
|
|
8f195e9 |
+ struct ifconf param;
|
|
|
8f195e9 |
+ int sock;
|
|
|
8f195e9 |
+ unsigned int i;
|
|
|
8f195e9 |
+
|
|
|
8f195e9 |
+ *ifaces = malloc(ifaces_size);
|
|
|
8f195e9 |
+ sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
|
|
|
8f195e9 |
+ if (sock <= 0)
|
|
|
8f195e9 |
+ return 0;
|
|
|
8f195e9 |
+ for (;;) {
|
|
|
8f195e9 |
+ param.ifc_len = ifaces_size;
|
|
|
8f195e9 |
+ param.ifc_req = *ifaces;
|
|
|
8f195e9 |
+ if (ioctl(sock, SIOCGIFCONF, ¶m))
|
|
|
8f195e9 |
+ goto err;
|
|
|
8f195e9 |
+ if (param.ifc_len < ifaces_size)
|
|
|
8f195e9 |
+ break;
|
|
|
8f195e9 |
+ free(*ifaces);
|
|
|
8f195e9 |
+ ifaces_size *= 2;
|
|
|
8f195e9 |
+ ifaces = malloc(ifaces_size);
|
|
|
8f195e9 |
+ }
|
|
|
8f195e9 |
+ *count = param.ifc_len / sizeof(struct ifreq);
|
|
|
8f195e9 |
+ close(sock);
|
|
|
8f195e9 |
+ return 1;
|
|
|
8f195e9 |
+ err:
|
|
|
8f195e9 |
+ close(sock);
|
|
|
8f195e9 |
+ return 0;
|
|
|
8f195e9 |
+}
|
|
|
8f195e9 |
+
|
|
|
8f195e9 |
+
|
|
|
8f195e9 |
+
|
|
|
8f195e9 |
int
|
|
|
8f195e9 |
main(int argc, char *argv[])
|
|
|
8f195e9 |
{
|
|
|
8f195e9 |
@@ -189,6 +263,8 @@
|
|
|
8f195e9 |
warnx("using %s", nids_params.filename);
|
|
|
8f195e9 |
}
|
|
|
8f195e9 |
}
|
|
|
8f195e9 |
+
|
|
|
8f195e9 |
+ all_local_ipaddrs_chksum_disable();
|
|
|
8f195e9 |
|
|
|
8f195e9 |
nids_run();
|
|
|
8f195e9 |
|