rendered paste body/* grabs telnet banners from sqlite3 nmap dumps */
/* very simple somewhat boring */
/* fbff */
#include <stdio.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <netdb.h>
#include <netinet/tcp.h>
#include <sqlite3.h>
/* i'm not sure why there are here, they sounded good */
#define ALLOC(x) malloc((x)+1)
#define ZERO(p,i) memset((p),'\0',(i+1))
#define DESTORY(x) free((x))
static void banner_grab(unsigned char *host, unsigned int port)
{
int sd;
int ret;
int ssize;
unsigned char *q;
struct sockaddr_in saddr;
if ((sd = socket(AF_INET, SOCK_STREAM, 0))<0)
return;
saddr.sin_family = AF_INET;
saddr.sin_port = htons(port);
saddr.sin_addr.s_addr = inet_addr(host);
//memset((&saddr.sin_zero, '\0', 8));
if ( (ret = connect(sd, (struct sockaddr *)&saddr, sizeof(struct sockaddr)))<0)
return;
q = ALLOC(1024); ZERO(q, 1024);
if ( (ret = recv(sd, q, 1024, 0)) > 0) {
printf("%s\n", q);
}
DESTORY(q);
close(sd);
return;
}
static int callback(void *NoteUsed, int argc, char **argv, char **azColName)
{
int i;
unsigned char *ip;
unsigned int port;
port = 23;
for (i=0;i<argc;i++) {
if (!strcmp(azColName[i],"ip" )) {
if (argv[i]) {
ip = argv[i];
}
}
}
if (ip) {
printf("%s\n", ip);
banner_grab(ip, port);
}
return 0;
}
int main(int argc, char **argv)
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open(argv[1], &db);
if (rc) {
printf("can't open database\n");
sqlite3_close(db);
}
rc = sqlite3_exec(db, "SELECT * from nmap where port=23 AND state='open';",callback, 0, &zErrMsg);
if (rc != SQLITE_OK) {
printf("error!\n");
}
sqlite3_close(db);
return 0;
}