#1 2. Dezember 2006 Browser mit Proxy moin! also ich möchte einen simplen Webbrowser der über einen http-proxy verbindung ins internet aufnimmt. Und das ganze mit C. Den normalen simplen Browser habe ich schon, nur hab ich nichts gefunden wie man nun über einen proxy ins Internet geht. Achso was ich vielleicht noch erwähnen sollte, das ganze soll auf einem Linuxsystem laufen also keine winsocklösungen :tongue: Code: #include <sys/types.h> #include <sys/socket.h> #include <stdio.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> main(){ int socket_nummer; int laenge; int ergebnis; int anzahl; struct sockaddr_in adresse; char empfangene_zeichen[65000]; unsigned short int portnummer = 80; char ip_adresse[] = "192.168.1.1"; char befehl[] = "GET /index.php HTTP/1.1\r\nHost: PC\r\n\r\n"; socket_nummer = socket(AF_INET, SOCK_STREAM, 0); adresse.sin_family = AF_INET; adresse.sin_addr.s_addr = inet_addr(ip_adresse); adresse.sin_port = htons(portnummer); laenge = sizeof(adresse); ergebnis = connect(socket_nummer, (struct sockaddr*)&adresse, laenge); printf("\n Verbindung zu IP %s an Port %d", ip_adresse, portnummer); if (ergebnis == -1){ perror(" Keine Verbindung erfolg: "); }else{ printf("\n Verbindung erfolgt, sende HTTP-Befehl:\n\n/%s", befehl); anzahl = write(socket_nummer, befehl, sizeof(befehl)); printf(" es wurden %d Zeichen gesendet", anzahl); anzahl = read(socket_nummer, empfangene_zeichen, sizeof(empfangene_zeichen)); printf("\n es wurden %d Zeichen empfangen: \n\n%s", anzahl, empfangene_zeichen); if (strstr(empfangene_zeichen, "200 OK") == NULL){ printf("\n Der Server hat die Datei nicht gesendet"); }else{ printf("\n Der Server hat die Datei gesendet"); } } close(socket_nummer); printf("\n Programm beendet\n\n"); } ich bedanke mich schonmal für eure mühe greetz schiene + Multi-Zitat Zitieren
#2 2. Dezember 2006 AW: Browser mit Proxy Und wie stellst du dir das Parsen von HTML vor ? Du weisst, dass das keine Arbeit von 2 Tagen ist oder ? + Multi-Zitat Zitieren
#3 2. Dezember 2006 AW: Browser mit Proxy naja darum geht es jetzt ja überhaupt nicht... es geht ja nur um das prinzip die daten vom server über einen proxy anzufordern und zu empfangen. mich würde auch mal interessieren, bin auch mal auf der suche gewesen hab aber nix gefunden greez myth + Multi-Zitat Zitieren
#4 2. Dezember 2006 AW: Browser mit Proxy Bevor man sich ueberlegt was man machen will informiert man sich, daher frag ich ihn lieber ob er ueberhaupt irgendwo drauf kann (ausser runterladen von Dateien). + Multi-Zitat Zitieren
#5 2. Dezember 2006 AW: Browser mit Proxy Hi, fork() und select() sind die Stichwoerter. Mfg, Kolazomai + Multi-Zitat Zitieren
#6 3. Dezember 2006 AW: Browser mit Proxy das parsen ist jetzt ertsmal nebensache ich möchte einfach erstmal eine datei über einen proxy bekommen. könntest du mir dasbeispielhaft zeigen wie das dann funktioniert, wenn du damit schon gearbeitet hast, Kolazomai das wäre nett + Multi-Zitat Zitieren
#7 3. Dezember 2006 AW: Browser mit Proxy Du sendest ein HTTP Get an den Proxy anstatt an den urspruenglichen Server und der Proxy uebermittelt dir die Daten zurueck. + Multi-Zitat Zitieren
#8 3. Dezember 2006 AW: Browser mit Proxy Hi, wenn du einen Proxy bauen willst, so wie ich das jetz verstehe, musst du ja gleichzeitig sowohl auf den Clienten, als auch auf die Verbindungen, die du aufgebaut hast, 'recv()' callen. Da recv() aber blockiert und es non-blocking zu setzen Bloedsinn ist, musst du dir mit etwas anderem helfen. Und da sind die Stichwoerter fork() und select(). 1. fork() fork() erstellt ( aber nur unter *nix ) einen sogenannten 'Child'-Prozess. Damit kannste dann, je nach Anzahl der Childs, praktisch sehr viele Sachen gleichzeitig machen. Nachteil: Man kann das ganze Ausnutzen ( als Client ) und 100 'Child'-Prozesse erstellen. Dann kackt dein Server meistens ab. Wenn du Apache auf einem Unix-Server installierst, und startest, und danach mal ps -A eingibst, dann wirste sehen, dass da nicht 1mal 'Apache' steht, sondern so 3-6 mal. Das kommt davon, dass Apache fork() (mit Einschraenkungen) benutzt 2. select() select() ist so eine Sache fuer sich. Wenn mans mal verstanden hat, und nicht nur, wie es funktioniert, sondern auch, wie man es benutzt, ist es ziemlich geil. Zur kurzen Einfuehrung: Select nimmt sowas wie ein Array ( heisst fd_set ) aus FDs ( FileDescriptoren ), und du kannst dann schauen, welcher von den FDs gesetzt ( heisst: Da sind Daten, die empfangen werden wollen ) ist. Das ganze baut man meistens in eine Endlos-Schleife. Die Idee ist jetzt ganz einfach: 1. Du machst ein Array aus Sockets, die zu Servern connecten sollen. ( A ) 2. Du machst einen Socket ( oder mehrere, wenn du willst ), der / die die Verbindung(en) zu einem Client(en) annehmen soll(en). ( B ) Dann haust du einfach alle Sockets von A, falls sie nicht ein (-1)-Socket sind, in das fd_set, und dann alle von B, wieder mit der Bedingung. Danach select() ausfuehren, und gucken, welche gesetzt sind und dementsprechend agieren. Ausserdem ist select() noch crossplatform, das heisst, du kannst es auf *nix wie auf Windows-Basis laufen lassen. Nachteil: Wie du das mit connect()-Timeout loest oder wenn der Server (gegenueber) sehr langsam ist, weiss ich nicht. Vielleicht geht das mit der Timeout-Funktion von select() ( ja, das kann sehr viel ), oder mit bestimmten Socket-Optionen. --- Man kann sagen, dass jede MehrClientenAnwendung auf *nix-System entweder select() oder fork() benutzt, um der Sache Herr zu werden. Mfg, Kolazomai + Multi-Zitat Zitieren
#9 3. Dezember 2006 AW: Browser mit Proxy also ich möchte keinen proxy bauen, ich möchte über einen proxy daten aus dem internet bzw. in diesem beispiel jetzt von einer seite(webserver) bekommen aber trotzdem danke Kolazomai war eine schöne erklärung wie genau müsste die anfrage dann aussehn bzw. was muss ich an dem code dann verändern? + Multi-Zitat Zitieren
#10 6. Dezember 2006 AW: Browser mit Proxy also wenn es ein einfacher HTTP-Request sein soll dann geht das so: Code: GET index.html HTTP/1.0\nHost: www.google.de\n\n im grunde genau so wie du es shcon in deinem Code stehen hast. versuche es mal und schicke das ganze an irgendeinen proxy (port musste natürlich anpassen) allerdings darfst du als Host in dem HTTP-Request nicht den Proxy sondern die Homepage angeben die du über den proxy aufrufen möchtest. sollte stimmen wenn ich richtig liege XD greez myth + Multi-Zitat Zitieren
#11 7. Dezember 2006 AW: Browser mit Proxy alles klar danke dir werd ich ma später testen ~ closed ~ + Multi-Zitat Zitieren
#12 7. Dezember 2006 AW: Browser mit Proxy [X] Erledigt. ~closed~ Mfg, Kolazomai + Multi-Zitat Zitieren