Zum Inhalt springen

Expi

Mitglieder
  • Gesamte Inhalte

    26
  • Benutzer seit

  • Letzter Besuch

  1. Expi

    NT / SQL Scanner

    Kannst mir da ein Beispiel für geben?
  2. Expi

    NT / SQL Scanner

    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?
  3. Expi

    NT / SQL Scanner

    Und wie bring ich das in Ordnung ?
  4. Expi

    NT / SQL Scanner

    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
  5. Expi

    NT / SQL Scanner

    Weil ich in C Programmiere und nicht in C++. Dass kommt noch.
  6. Expi

    NT / SQL Scanner

    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
  7. Expi

    NT / SQL Scanner

    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
  8. Expi

    SQL in C Programm

    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
  9. 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
  10. Expi

    Thread beenden

    ok, habs. thx
  11. Expi

    Thread beenden

    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 ?
  12. Expi

    Thread beenden

    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
  13. Expi

    Thread beenden

    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; } .....
  14. Expi

    Thread beenden

    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
  15. 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

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...