]> git.sesse.net Git - nbtscanner/commitdiff
Import nbtscanner 0.2.0. master
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Thu, 18 Apr 2019 15:26:39 +0000 (17:26 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Thu, 18 Apr 2019 15:26:39 +0000 (17:26 +0200)
configfile.c
configfile.h
init.sql
mysql_interface.c
mysql_interface.h
nbtscanner.c
nbtscanner.conf

index 0faf1e5dbcccdbdd8a2231773762ce56086041fe..f8350c067c3d3bf0aa8384b6539366635eb92b89 100644 (file)
@@ -36,6 +36,7 @@
 int num_retries;
 int retry_time;
 int delay_time;
+int ghost_lifetime;
 int verbosity;
 
 int scan_interval;
@@ -64,6 +65,7 @@ void parse_configfile()
        num_retries = 3;
        retry_time = 5000;
        delay_time = 100;
+       ghost_lifetime = 1800;
        verbosity = 2;
 
        ranges = 0;
@@ -146,6 +148,8 @@ void parse_keyword(char *keyword, char *value, int lineno)
                parse_int(value, &retry_time, lineno);
        } else if (strcasecmp(keyword, "delay_time") == 0) {
                parse_int(value, &delay_time, lineno);
+       } else if (strcasecmp(keyword, "ghost_lifetime") == 0) {
+               parse_int(value, &ghost_lifetime, lineno);
        } else if (strcasecmp(keyword, "verbosity") == 0) {
                parse_int(value, &verbosity, lineno);
        } else if (strcasecmp(keyword, "scan_interval") == 0) {
index 759656f49f005ef387975ee7cc16adc44316b3b2..7abab446957b1c7f6acaadd60c0c48e166486c5b 100644 (file)
@@ -33,6 +33,7 @@
 extern int num_retries;
 extern int retry_time;
 extern int delay_time;
+extern int ghost_lifetime;
 extern int verbosity;
 
 extern int scan_interval;
index fbe16ce8e90ff583863e2ae0d6ef2633d8027386..f0af74d6020e68d059065544126fb2e45b98ad3d 100644 (file)
--- a/init.sql
+++ b/init.sql
@@ -10,6 +10,9 @@ CREATE TABLE nbtscanner (
        hostname CHAR(32),
        fileservername CHAR(32),
        groupname CHAR(32),
+       active ENUM('y','n'),
+       lastactive DATETIME,
+       messenger ENUM('y','n'),
        PRIMARY KEY (
                ip
        )
index eac9ea2d750b8e695acae8d59086826d9dab058c..fccd58c9edf22714055c09c329e53c6a162aa720 100644 (file)
@@ -54,7 +54,8 @@ void init_mysql(char *host, char *username, char *password)
        }
 }
 
-void add_record_mysql(char *ip, char *hostname, char *fileservername, char *groupname)
+void add_record_mysql(char *ip, char *hostname, char *fileservername, char *groupname,
+                     char messenger)
 {
        char query[256];
        char hname[256], fsname[256], gname[256];
@@ -64,8 +65,8 @@ void add_record_mysql(char *ip, char *hostname, char *fileservername, char *grou
        mysql_real_escape_string(mysql, gname, groupname, strlen(groupname));
 
        snprintf(query, 256,
-               "REPLACE INTO nbtscanner.nbtscanner SET ip='%s', hostname='%s', fileservername='%s', groupname='%s';",
-               ip, hname, fsname, gname);
+               "REPLACE INTO nbtscanner.nbtscanner SET ip='%s', hostname='%s', fileservername='%s', groupname='%s', active='y', lastactive=now(), messenger='%c';",
+               ip, hname, fsname, gname, messenger);
 
        if (mysql_query(mysql, query) != 0) {
                if (verbosity >= 1) {
@@ -79,7 +80,7 @@ void delete_record_mysql(char *ip)
 {
        char query[256];
        snprintf(query, 256,
-               "DELETE FROM nbtscanner.nbtscanner WHERE ip='%s';",
+               "UPDATE nbtscanner.nbtscanner SET ACTIVE='n' WHERE ip='%s';",
                ip);
 
        if (mysql_query(mysql, query) != 0) {
@@ -96,8 +97,12 @@ void print_all_records_mysql()
        unsigned long *lengths;
        unsigned int num_fields;
        int i;
+       char query[512];
 
-       if (mysql_query(mysql, "SELECT ip,(CASE WHEN fileservername='-unknown-nbtscanner-' THEN hostname ELSE fileservername END),groupname,(fileservername <> '-unknown-nbtscanner-') FROM nbtscanner.nbtscanner;") != 0) {
+       snprintf(query, 512, "SELECT ip,(CASE WHEN fileservername='-unknown-nbtscanner-' THEN hostname ELSE fileservername END),groupname,(fileservername <> '-unknown-nbtscanner-') FROM nbtscanner.nbtscanner WHERE active='y' OR lastactive>DATE_SUB(NOW(), INTERVAL %d SECOND);",
+               ghost_lifetime);
+
+       if (mysql_query(mysql, query) != 0) {
                if (verbosity >= 1) {
                        fprintf(stderr, "mysql_query('SELECT ip'...) failed\n");
                }
index 26565dc4008ca5886f6dc6e4716872be20d46846..647bed4d76d141e008c9c99e3f04ff4230a98f0d 100644 (file)
@@ -26,7 +26,7 @@
 #define _MYSQL_INTERFACE_H 1
 
 void init_mysql(char *host, char *username, char *password);
-void add_record_mysql(char *ip, char *hostname, char *fileservername, char *groupname);
+void add_record_mysql(char *ip, char *hostname, char *fileservername, char *groupname, char messenger);
 void delete_record_mysql(char *ip);
 void print_all_records_mysql();
 void finish_mysql();
index 223965cecacd61994ebe507dc3311dc526803554..ab454180682ffc9f9356a2f8bf8b3157c90fa6fb 100644 (file)
@@ -51,6 +51,7 @@ void interpret_node_status(char *p, struct in_addr in)
 {
        int numnames = CVAL(p,0);
        char hostname[32], fileservername[32], group[32];
+       char messenger;
 
        /*
         * hopefully this will be enough to identify the host as unknown
@@ -60,6 +61,7 @@ void interpret_node_status(char *p, struct in_addr in)
        strcpy(hostname, "-unknown-nbtscanner-");
        strcpy(fileservername, "-unknown-nbtscanner-");
        strcpy(group, "-unknown-nbtscanner-");
+       messenger = 'n';
 
        p += 1;
        while (numnames--) {
@@ -100,14 +102,18 @@ void interpret_node_status(char *p, struct in_addr in)
                if ((p[0] & 0x80) == 0x80 && ((p[0] & 0x1f) == 0x04) && type == 0x00) {
                        strcpy(group, qname);
                }
+               /* Messenger up (type 0x03) */
+               if (type == 0x03) {
+                       messenger = 'y';
+               }
 
                p += 2;
        }
 
        if (use_mysql) {
-               add_record_mysql(inet_ntoa(in), hostname, fileservername, group);
+               add_record_mysql(inet_ntoa(in), hostname, fileservername, group, messenger);
        } else {
-               printf("%s,%s,%s,%s\n", inet_ntoa(in), hostname, fileservername, group);
+               printf("%s,%s,%s,%s,%c\n", inet_ntoa(in), hostname, fileservername, group, messenger);
        }
 }
 
index 25ed502752f0f6516c4bb22821da5c27885aa721..4b4d7c091f5db02de49e5fda24f110669047c16c 100644 (file)
@@ -18,6 +18,13 @@ retry_time=5000
 # How long nbtscanner will delay between each sent packet, in ms.
 delay_time=2
 
+#
+# How long a host may be inactive before it's purged from the database.
+# Note that this value is in seconds, not milliseconds like the other
+# time values in this file.
+#
+ghost_lifetime=60
+
 # How long there will be between the _start_ of each scan, in ms.
 # The default (half an hour, or 1800 seconds) should be OK.
 scan_interval=400000
@@ -53,7 +60,7 @@ verbosity=3
 # all the IPs to standard output. This is highly recommended, but
 # needs some table setup before use.
 #
-use_mysql=0
+use_mysql=1
 
 #
 # Your MySQL server information. mysql_host is the IP address (or
@@ -64,7 +71,7 @@ use_mysql=0
 #
 mysql_host=localhost
 mysql_username=nbtscanner
-mysql_password=tg01
+mysql_password=qugx8M!S
 
 #
 # Each IP address range is specified with a range= parameter.
@@ -82,6 +89,7 @@ mysql_password=tg01
 #
 #range=158.39.124.0/23
 #range=213.236.192.0/24
-range=10.0.0.0/16
+range=10.0.7.80/28
 #range=10.0.19.0/24
+range=213.236.192.0/24