12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- diff -Nur dsniff-2.4-old/dsniff.c dsniff-2.4/dsniff.c
- --- dsniff-2.4-old/dsniff.c 2009-09-15 00:11:20.318202445 +0300
- +++ dsniff-2.4/dsniff.c 2009-09-15 00:11:20.780452193 +0300
- @@ -70,6 +70,80 @@
- {
- }
-
- +
- +static int get_all_ifaces(struct ifreq **, int *);
- +static unsigned int get_addr_from_ifreq(struct ifreq *);
- +
- +int all_local_ipaddrs_chksum_disable()
- +{
- + struct ifreq *ifaces;
- + int ifaces_count;
- + int i, ind = 0;
- + struct nids_chksum_ctl *ctlp;
- + unsigned int tmp;
- +
- + if (!get_all_ifaces(&ifaces, &ifaces_count))
- + return -1;
- + ctlp =
- + (struct nids_chksum_ctl *) malloc(ifaces_count *
- + sizeof(struct
- + nids_chksum_ctl));
- + if (!ctlp)
- + return -1;
- + for (i = 0; i < ifaces_count; i++) {
- + tmp = get_addr_from_ifreq(ifaces + i);
- + if (tmp) {
- + ctlp[ind].netaddr = tmp;
- + ctlp[ind].mask = inet_addr("255.255.255.255");
- + ctlp[ind].action = NIDS_DONT_CHKSUM;
- + ind++;
- + }
- + }
- + free(ifaces);
- + nids_register_chksum_ctl(ctlp, ind);
- +}
- +
- +/* helper functions for Example 2 */
- +unsigned int get_addr_from_ifreq(struct ifreq *iface)
- +{
- + if (iface->ifr_addr.sa_family == AF_INET)
- + return ((struct sockaddr_in *) &(iface->ifr_addr))->
- + sin_addr.s_addr;
- + return 0;
- +}
- +
- +static int get_all_ifaces(struct ifreq **ifaces, int *count)
- +{
- + int ifaces_size = 8 * sizeof(struct ifreq);
- + struct ifconf param;
- + int sock;
- + unsigned int i;
- +
- + *ifaces = malloc(ifaces_size);
- + sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
- + if (sock <= 0)
- + return 0;
- + for (;;) {
- + param.ifc_len = ifaces_size;
- + param.ifc_req = *ifaces;
- + if (ioctl(sock, SIOCGIFCONF, ¶m))
- + goto err;
- + if (param.ifc_len < ifaces_size)
- + break;
- + free(*ifaces);
- + ifaces_size *= 2;
- + ifaces = malloc(ifaces_size);
- + }
- + *count = param.ifc_len / sizeof(struct ifreq);
- + close(sock);
- + return 1;
- + err:
- + close(sock);
- + return 0;
- +}
- +
- +
- +
- int
- main(int argc, char *argv[])
- {
- @@ -189,6 +263,8 @@
- warnx("using %s", nids_params.filename);
- }
- }
- +
- + all_local_ipaddrs_chksum_disable();
-
- nids_run();
-
|