summaryrefslogtreecommitdiffstats
path: root/contrib/ipfilter/ipsd/ipsdr.c
diff options
context:
space:
mode:
authorcy <cy@FreeBSD.org>2013-07-19 05:41:57 +0000
committercy <cy@FreeBSD.org>2013-07-19 05:41:57 +0000
commit672af8808c0e7c15f330b401482f9271c2eb3fa6 (patch)
tree225b5acf68c01bc6a260b386c2b2dbf4fa2839e3 /contrib/ipfilter/ipsd/ipsdr.c
parent71e82d94e82560b20789833f60056506de34de8b (diff)
downloadFreeBSD-src-672af8808c0e7c15f330b401482f9271c2eb3fa6.zip
FreeBSD-src-672af8808c0e7c15f330b401482f9271c2eb3fa6.tar.gz
As per the developers handbook (5.3.1 step 1), prepare the vendor trees for
import of new ipfilter vendor sources by flattening them. To keep the tags consistent with dist, the tags are also flattened. Approved by: glebius (Mentor)
Diffstat (limited to 'contrib/ipfilter/ipsd/ipsdr.c')
-rw-r--r--contrib/ipfilter/ipsd/ipsdr.c312
1 files changed, 0 insertions, 312 deletions
diff --git a/contrib/ipfilter/ipsd/ipsdr.c b/contrib/ipfilter/ipsd/ipsdr.c
deleted file mode 100644
index af007e4..0000000
--- a/contrib/ipfilter/ipsd/ipsdr.c
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
- * (C)opyright 1995-1998 Darren Reed.
- *
- * See the IPFILTER.LICENCE file for details on licencing.
- *
- */
-#include <stdio.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <malloc.h>
-#include <netdb.h>
-#include <string.h>
-#include <sys/dir.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <netinet/tcp.h>
-#include <netinet/udp.h>
-#include <netinet/ip_icmp.h>
-#ifndef linux
-#include <netinet/ip_var.h>
-#include <netinet/tcpip.h>
-#endif
-#include "ip_compat.h"
-#ifdef linux
-#include <linux/sockios.h>
-#include "tcpip.h"
-#endif
-#include "ipsd.h"
-
-#ifndef lint
-static const char sccsid[] = "@(#)ipsdr.c 1.3 12/3/95 (C)1995 Darren Reed";
-static const char rcsid[] = "@(#)$Id: ipsdr.c,v 2.2 2001/06/09 17:09:25 darrenr Exp $";
-#endif
-
-extern char *optarg;
-extern int optind;
-
-#define NPORTS 21
-
-u_short defports[NPORTS] = {
- 7, 9, 20, 21, 23, 25, 53, 69, 79, 111,
- 123, 161, 162, 512, 513, 513, 515, 520, 540, 6000, 0
- };
-u_short pweights[NPORTS] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- };
-
-ipsd_t *iphits[NPORTS];
-int pkts;
-
-
-int ipcmp(sh1, sh2)
-sdhit_t *sh1, *sh2;
-{
- return sh1->sh_ip.s_addr - sh2->sh_ip.s_addr;
-}
-
-
-int ssipcmp(sh1, sh2)
-ipss_t *sh1, *sh2;
-{
- return sh1->ss_ip.s_addr - sh2->ss_ip.s_addr;
-}
-
-
-int countpbits(num)
-u_long num;
-{
- int i, j;
-
- for (i = 1, j = 0; i; i <<= 1)
- if (num & i)
- j++;
- return j;
-}
-
-
-/*
- * Check to see if we've already received a packet from this host for this
- * port.
- */
-int findhit(ihp, src, dport)
-ipsd_t *ihp;
-struct in_addr src;
-u_short dport;
-{
- int i, j, k;
- sdhit_t *sh;
-
- sh = NULL;
-
- if (ihp->sd_sz == 4) {
- for (i = 0, sh = ihp->sd_hit; i < ihp->sd_cnt; i++, sh++)
- if (src.s_addr == sh->sh_ip.s_addr)
- return 1;
- } else {
- for (i = ihp->sd_cnt / 2, j = (i / 2) - 1; j >= 0; j--) {
- k = ihp->sd_hit[i].sh_ip.s_addr - src.s_addr;
- if (!k)
- return 1;
- else if (k < 0)
- i -= j;
- else
- i += j;
- }
- }
- return 0;
-}
-
-
-/*
- * Search for port number amongst the sorted array of targets we're
- * interested in.
- */
-int detect(srcip, dport, date)
-struct in_addr srcip;
-u_short dport;
-time_t date;
-{
- ipsd_t *ihp;
- sdhit_t *sh;
- int i, j, k;
-
- for (i = 10, j = 4; j >= 0; j--) {
- k = dport - defports[i];
- if (!k) {
- ihp = iphits[i];
- if (findhit(ihp, srcip, dport))
- return 0;
- sh = ihp->sd_hit + ihp->sd_cnt;
- sh->sh_date = date;
- sh->sh_ip = srcip;
- if (++ihp->sd_cnt == ihp->sd_sz)
- {
- ihp->sd_sz += 8;
- sh = realloc(sh, ihp->sd_sz * sizeof(*sh));
- ihp->sd_hit = sh;
- }
- qsort(sh, ihp->sd_cnt, sizeof(*sh), ipcmp);
- return 0;
- }
- if (k < 0)
- i -= j;
- else
- i += j;
- }
- return -1;
-}
-
-
-/*
- * Allocate initial storage for hosts
- */
-setuphits()
-{
- int i;
-
- for (i = 0; i < NPORTS; i++) {
- if (iphits[i]) {
- if (iphits[i]->sd_hit)
- free(iphits[i]->sd_hit);
- free(iphits[i]);
- }
- iphits[i] = (ipsd_t *)malloc(sizeof(ipsd_t));
- iphits[i]->sd_port = defports[i];
- iphits[i]->sd_cnt = 0;
- iphits[i]->sd_sz = 4;
- iphits[i]->sd_hit = (sdhit_t *)malloc(sizeof(sdhit_t) * 4);
- }
-}
-
-
-/*
- * Write statistics out to a file
- */
-addfile(file)
-char *file;
-{
- ipsd_t ipsd, *ips = &ipsd;
- sdhit_t hit, *hp;
- char fname[32];
- int i, fd, sz;
-
- if ((fd = open(file, O_RDONLY)) == -1) {
- perror("open");
- return;
- }
-
- printf("opened %s\n", file);
- do {
- if (read(fd, ips, sizeof(*ips)) != sizeof(*ips))
- break;
- sz = ips->sd_sz * sizeof(*hp);
- hp = (sdhit_t *)malloc(sz);
- if (read(fd, hp, sz) != sz)
- break;
- for (i = 0; i < ips->sd_cnt; i++)
- detect(hp[i].sh_ip, ips->sd_port, hp[i].sh_date);
- } while (1);
- (void) close(fd);
-}
-
-
-readfiles(dir)
-char *dir;
-{
- struct direct **d;
- int i, j;
-
- d = NULL;
- i = scandir(dir, &d, NULL, NULL);
-
- for (j = 0; j < i; j++) {
- if (strncmp(d[j]->d_name, "ipsd-hits.", 10))
- continue;
- addfile(d[j]->d_name);
- }
-}
-
-
-void printreport(ss, num)
-ipss_t *ss;
-int num;
-{
- struct in_addr ip;
- ipss_t *sp;
- int i, j, mask;
- u_long ports;
-
- printf("Hosts detected: %d\n", num);
- if (!num)
- return;
- for (i = 0; i < num; i++)
- printf("%s %d %d\n", inet_ntoa(ss[i].ss_ip), ss[i].ss_hits,
- countpbits(ss[i].ss_ports));
-
- printf("--------------------------\n");
- for (mask = 0xfffffffe, j = 32; j; j--, mask <<= 1) {
- ip.s_addr = ss[0].ss_ip.s_addr & mask;
- ports = ss[0].ss_ports;
- for (i = 1; i < num; i++) {
- sp = ss + i;
- if (ip.s_addr != (sp->ss_ip.s_addr & mask)) {
- printf("Netmask: 0x%08x\n", mask);
- printf("%s %d\n", inet_ntoa(ip),
- countpbits(ports));
- ip.s_addr = sp->ss_ip.s_addr & mask;
- ports = 0;
- }
- ports |= sp->ss_ports;
- }
- if (ports) {
- printf("Netmask: 0x%08x\n", mask);
- printf("%s %d\n", inet_ntoa(ip), countpbits(ports));
- }
- }
-}
-
-
-collectips()
-{
- ipsd_t *ips;
- ipss_t *ss;
- int i, num, nip, in, j, k;
-
- for (i = 0; i < NPORTS; i++)
- nip += iphits[i]->sd_cnt;
-
- ss = (ipss_t *)malloc(sizeof(ipss_t) * nip);
-
- for (in = 0, i = 0, num = 0; i < NPORTS; i++) {
- ips = iphits[i];
- for (j = 0; j < ips->sd_cnt; j++) {
- for (k = 0; k < num; k++)
- if (!bcmp(&ss[k].ss_ip, &ips->sd_hit[j].sh_ip,
- sizeof(struct in_addr))) {
- ss[k].ss_hits += pweights[i];
- ss[k].ss_ports |= (1 << i);
- break;
- }
- if (k == num) {
- ss[num].ss_ip = ips->sd_hit[j].sh_ip;
- ss[num].ss_hits = pweights[i];
- ss[k].ss_ports |= (1 << i);
- num++;
- }
- }
- }
-
- qsort(ss, num, sizeof(*ss), ssipcmp);
-
- printreport(ss, num);
-}
-
-
-main(argc, argv)
-int argc;
-char *argv[];
-{
- char c, *name = argv[0], *dir = NULL;
- int fd;
-
- setuphits();
- dir = dir ? dir : ".";
- readfiles(dir);
- collectips();
-}
OpenPOWER on IntegriCloud