int num_retries;
int retry_time;
int delay_time;
+int ghost_lifetime;
int verbosity;
int scan_interval;
num_retries = 3;
retry_time = 5000;
delay_time = 100;
+ ghost_lifetime = 1800;
verbosity = 2;
ranges = 0;
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) {
extern int num_retries;
extern int retry_time;
extern int delay_time;
+extern int ghost_lifetime;
extern int verbosity;
extern int scan_interval;
hostname CHAR(32),
fileservername CHAR(32),
groupname CHAR(32),
+ active ENUM('y','n'),
+ lastactive DATETIME,
+ messenger ENUM('y','n'),
PRIMARY KEY (
ip
)
}
}
-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];
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) {
{
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) {
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");
}
#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();
{
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
strcpy(hostname, "-unknown-nbtscanner-");
strcpy(fileservername, "-unknown-nbtscanner-");
strcpy(group, "-unknown-nbtscanner-");
+ messenger = 'n';
p += 1;
while (numnames--) {
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);
}
}
# 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
# 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
#
mysql_host=localhost
mysql_username=nbtscanner
-mysql_password=tg01
+mysql_password=qugx8M!S
#
# Each IP address range is specified with a range= parameter.
#
#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