
Expi
Mitglieder-
Gesamte Inhalte
26 -
Benutzer seit
-
Letzter Besuch
Inhaltstyp
Profile
Forum
Downloads
Kalender
Blogs
Shop
Alle Inhalte von Expi
-
Kannst mir da ein Beispiel für geben?
-
würde es reichen wenn ich es so mache? void *scannerNT(void *addr) { char destaddr[20]; strcpy(destaddr, addr); ..... scan.sin_addr.s_addr = inet_addr(destaddr); ..... } oder war das jetzt ein Denkfehler?
-
Und wie bring ich das in Ordnung ?
-
Das Problem ist, dass ich den Scanner in ein bereits vorhandenes C Programm integrieren will. Das umschreiben des Progs würde viel zu viel Zeit beanspruchen. Du magst recht haben über den Sinn dieses Vorhabens, aber mir bietet sich leider keine andere Möglichkeit. Kannst du (oder jemand anders) mir trotzdem helfen das ganze ans laufen zu bringen? Fangen wir mit dem Pingen (mit Threads) an und arbeiten uns zum Anmelden an SQL/NT heran. Sagen wir mal, ich möchte das der Scanner unendlich lange läuft, also ohne Range starten, und maximal 20 Threads erzeugt. Dann müsste das doch ungefähr so aussehen. (Garantiert Fehler drin, da ich noch nie was derartiges geschrieben habe) struct sockaddr_in scan; int maxNtThread = 20; // maximal Anzahl von Threads int curNtThread = 0; // Derzeitige Anzahl von Threads int ntPort = 139; // NT Port int TermNtThread = 0; // Falls auf 1 gesetzt werden alle Threads beendet void *scannerNT(void *addr) { int s; if(TermNtThread == 1) { pthread_exit( NULL ); } s = socket(AF_INET, SOCK_STREAM, 0); if (s == -1) { curNtThread--; return NULL; } // jetzt zu der Ip Connecten scan.sin_family = AF_INET; /* inet_addr() wandelt einen String mit einer IPAdresse in 'dotted' Schreibweise in eine vom Rechner lesbare Form um */ scan.sin_addr.s_addr = inet_addr(addr); scan.sin_port = htons(ntPort); if(connect(s, (struct sockaddr *)&scan, sizeof(scan)) == -1) { close(s); } else { printf("Port offen!"); close(s); } curNtThread--; return NULL; } void *ntscaninit(void *arg) { int a,b,c,d; char destaddr[20]; pthread_t p1[maxNtThread]; while(1) { for(a = 70; a < 255; a++) { // Mit Blacklist-IP's abgleichen if(((a >= 127) && (a <= 170)) || ((a >= 192) && (a <= 217))) { continue; } for(b = 0; b < 255; b++) { for(c = 0; c < 255; c++) { for(d = 1; d < 255; d++) { wsprintf(destaddr,"%i.%i.%i.%i", a, b, c, d); // Falls TermNtThread == 1 Thread beenden if(TermNtThread == 1) { pthread_exit( NULL ); } // Falls derzeitige Threads größer oder gleich maxNtThread ist, diese While Schleife wiederholen while(curNtThread >= maxNtThread) { printf(""); // ohne dieses printf funzt die Schleife nicht, k.a. wieso continue; } curNtThread++; pthread_create(&p1[curNtThread], NULL, scannerNT, &destaddr); pthread_detach(p1[curNtThread]); } } } } return NULL; } Was kann man da verbessern? Bzw das mit den Threads besser regeln. Und wenn ich den Scanner so starte, dann pingt er manche IP's doppelt. Also eigentlich müsste er so pingen: 70.0.0.1, 70.0.0.2, 70.0.0.3 usw Aber er macht meistens: 70.0.0.1, 70.0.0.2, 70.0.0.2, 70.0.0.3, 70.0.0.3 usw Woran liegt das ? Und wieso spielt die while anweisung ohne das printf nicht mit? Fragen über Fragen. Bin dankbar für jede Hilfe. Thx
-
Weil ich in C Programmiere und nicht in C++. Dass kommt noch.
-
Ich will verstehen wie genau das funktioniert. Vorallem die SQL/NT Anmelderoutine interessiert mich. Aber genauso das Threaden und das aufsplitten der Range, in einzelne IP's, mit der man das Prog startet. Greets Ex
-
Hy, hat mir jemand nen Link zu ner Page die erklärt wie man nen Scanner mit C baut ? Soll bloß ein Konsolenapp sein, keine Gui. Hab viele Beispiele für C++ gefunden, aber nichts für C. Die Sourcen von IpcScan oder ScanSql wären genial, die 2 Scanner sind echt fein. Thanks
-
Also, hab mich noch etwas weiter mit Google beschäftigt und weiß jetzt dass man "unixODBC" installiert haben muss. odbcUnix ist in /usr/local installiert. Hier der Code von nem Beispiel Prog: #include <stdio.h> #include <sql.h> #include <sqlext.h> main() { SQLHENV env; char driver[256]; char attr[256]; SQLSMALLINT driver_ret; SQLSMALLINT attr_ret; SQLUSMALLINT direction; SQLRETURN ret; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env); SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void *) SQL_OV_ODBC3, 0); direction = SQL_FETCH_FIRST; while(SQL_SUCCEEDED(ret = SQLDrivers(env, direction, driver, sizeof(driver), &driver_ret, attr, sizeof(attr), &attr_ret))) { direction = SQL_FETCH_NEXT; printf("%s - %s\n", driver, attr); if (ret == SQL_SUCCESS_WITH_INFO) printf("\tdata truncation\n"); } } Die Optionen beim Compilen sollten folgende sein: gcc -c odbc.c -I/usr/local/include/ ( laut : http://www.dbmaker.com.tw/reference/manuals/odbc/odbc_chap_02.html ) und dann gcc -o odbc odbc.o -L/usr/local/lib -lodbc laut : http://www.easysoft.com/products/9999/faq_answer.phtml?ID=750&product=2002 ) Nur beim übersetzen kommt jetzt folgendes: $ gcc -o odbc odbc.o -L/usr/local/lib -lodbc /usr/local/lib/libodbc.a(__info.o): In function `unicode_shutdown': /home/test/unixODBC-2.2.11/DriverManager/__info.c:561: undefined reference to `_libiconv_close' /home/test/unixODBC-2.2.11/DriverManager/__info.c:566: undefined reference to `_libiconv_close' /usr/local/lib/libodbc.a(__info.o): In function `ansi_to_unicode_copy': /home/test/unixODBC-2.2.11/DriverManager/__info.c:719: undefined reference to `_libiconv' /usr/local/lib/libodbc.a(__info.o): In function `unicode_to_ansi_copy': /home/test/unixODBC-2.2.11/DriverManager/__info.c:664: undefined reference to `_libiconv' /usr/local/lib/libodbc.a(__info.o): In function `unicode_setup': /home/test/unixODBC-2.2.11/DriverManager/__info.c:470: undefined reference to `_libiconv_open' /home/test/unixODBC-2.2.11/DriverManager/__info.c:474: undefined reference to `_libiconv_close' /home/test/unixODBC-2.2.11/DriverManager/__info.c:534: undefined reference to `_libiconv_open' /home/test/unixODBC-2.2.11/DriverManager/__info.c:535: undefined reference to `_libiconv_open' /home/test/unixODBC-2.2.11/DriverManager/__info.c:492: undefined reference to `_libiconv_open' /home/test/unixODBC-2.2.11/DriverManager/__info.c:495: undefined reference to `_libiconv_close' collect2: ld returned 1 exit status Hat jemand ne Ahnung was da nicht stimmt ? Thx
-
Hy, was brauch ich alles um mich über ein c programm an nem sql server anzumelden ? OS ist Cygwin Compiler gcc Postgresql ist installiert Die includes sind "sql.h" und "sqlext.h", richtig ? Muss ich irgendwas dem compiler als option übergeben ? Thx
-
ok, das mit dem flag hab ich hinbekommen. aber wie warte ich auf das beenden der Threads wenn sie doch detached laufen ? und wie geb ich den Speicher wieder frei falls es nicht automatisch durch pthread_exit( NULL ); passiert ?
-
kannst du mir dazu ein beispiel geben ? das versuche ich nämlich grade, aber das bekomm ich auch nich ganz hin, der speicher wird nicht freigegeben. thx
-
wie richte ich einen globalen pointer auf den Thread? wenn ich pthread_t t; so definier gehts auch nich: int Run = 0; pthread_t t; // <-- jetzt hier void startThread(const input * const u) { // pthread_t t; // <---- Hier war es vorher if (!u->arg1) { printf("Es wurde keine Option angegeben (an/aus) !"); return; } .....
-
Hy leute, ich möchte das mein c programm eine funktion aufruft, welche dann wieder einen Thread erstellt. Da die Funktion aber beendet wird nachdem sie den Thread erstellt hat ist es nicht möglich den Thread durch sie wieder zu beenden, da die pthread_t t; (siehe code unten) nichtmehr gültig ist. int Run = 0; void startThread(const input * const u) { pthread_t t; // <---- if (!u->arg1) { printf("Es wurde keine Option angegeben (an/aus) !"); return; } if (!strcmp(u->arg1,"an")) { if(Run == 0) { pthread_create(&t, NULL, init, NULL); pthread_detach(t); } else { u_respond(u,"Der Thread läuft bereits !"); return; } } else if (!strcmp(u->arg1,"aus")) { if(lRun != 0) { int can; can = pthread_kill(t, SIGKILL); if((can == 0)) { Run--; printf("Der Thrad wurde beendet !"); return; } else { printf("Fehler beim beenden des Threads !!"); return; } } else { printf("Der Thread ist bereits AUS !"); return; } } else { printf("Unbekannte Option ! Es gibt nur \"an\" oder \"aus\" !"); return; } return; } Hab versucht die pthread_t t; global zu definieren, gab aber nur abstürze zur folge. Hat jemand ne idee ? Thx
-
Hy Leute, ich möchte für ein kleines chatprogramm eine update-funktion bauen. Da es nur eine sehr kleine stand-alone exe ist wollte ich das über eine bat-file lösen also dachte ich ich mach es so: #define _MAX_PATH 50 void update(const userinput * const u) { FILE *update_file; update_file = fopen("update.exe", "rb"); if(update_file != NULL) { fclose(update_file); char modulename[_MAX_PATH] ; char folder[_MAX_PATH] ; FILE *bat_file; bat_file = fopen("up.bat", "w"); GetModuleFileName(NULL, modulename, MAX_PATH) ; strcpy (folder, modulename) ; char *pb = strrchr(folder, '\\'); if (pb != NULL) *pb = 0 ; fprintf(bat_file, "@echo off\r\n" ":try\r\n" "del \"%s\"\r\n" "if exist \"%s\" goto try\r\n" "move %s\\update.exe %s\r\n" "del \"up.bat\"\r\n", modulename, modulename, folder,modulename); fclose(bat_file); ShellExecute(NULL, "open", "up.bat", NULL, NULL, SW_HIDE); } else { printf("Update Datei \"update.exe\" nicht gefunden !\n"); return; } exit(1); } [/PHP] Hat aber leider nicht funktioniert. Die Bat wurde erstellt, aber das wars auch. Sie hat die alte datei nicht durch die updtae.exe ersetzt. hat jemand ne Idee wie ich das ans laufen bekomm ? Thx
-
Das mit dem "Server konnte nicht gefunden werden" is wohl ne Router Sache. Hab den Fehler mittlerweile gefunden und behoben. Nur wie kann ich den RST Angriff von Outpost einfach ignorieren lassen statt denjenigen zu blockne ? Hab die passende einstellung nich gefunden. Thx im vorraus Expi
-
Hy Ja, ich verwende outpost firewall. Gut geraten *fg. Kann man das abstellen? Kann es auch an der Firewall liegen dass ich sehr oft: "Server wurde nich gefunden" als antwort bekomme ? Das nervt nämlich ganz schön. Und ich hab nicht rausgefunden woran das liegt. Ich weis, ich weis, das gehört in nen anderen Bereich aber ein tipp wäre trotzdem gut. Thx
-
Hy Leute, in letzter Zeit bekomme ich oft eine Warnung meiner Firewall die mich informiert, dass ich von eurem Board (IP) gescannt werde und gleichzeitig ein RST Angriff von eurer IP gegen mich versucht wird. Wasn da los ? Bitte um Antwort. Thx Expi
-
Danke für die zahlreichen Antworten. Ich habe mich für die Batch Variante nach SelfDestruct() entschieden. Obwohl die _asm Variante um die EXE Lock aufzuheben auch net schlecht ist. Danke nochmals. Expi
-
ja so in der art.
-
Was isn das für ne Sprache? Ich versteh den Syntax net ganz. Thx
-
Freut mich einen Stein ins Rollen gebracht zu haben. Scheinbar bin ich nicht der einzige den so ein Vorhaben interssiert. Die BatchFile Variante wäre vlt interessant, da ein batchfile sich selbst löschen kann, und somit auch von der .batch nix übrig bleiben würde. Nur wie erzeuge ich über C den Registry Eintrag ? Welche Funktion ist dafür zuständig ? Kann mir da einer ein Code Beispiel zeigen ? Thx
-
Das bringt mich nich weiter. bissle konstruktiver bitte. muss doch ne möglichkeit geben. und wenns indirekt ist. hauptsache das file is nachher weg.