getSource Methode wird als Bot erkannt

FaxXer

Mitglied
Hallo,
ich habe eine Methode geschrieben, die mir den Source einer beliebigen Homepage zurückgeben soll. Diese Homepage hat mehrere unter Seiten, die ich mit einer Schleife auch auslese.

Nach ein paar Seiten bekomme ich nicht mehr den richtigen Quelltext der Seite, sondern den Quelltext einer Seite auf dem festgestellt wird, dass ich ein Bot bin und eine Captcha abfrage.
Es ist mir klar, dass die betreiber dieser Seite das dann nicht wollen. Mir gehts es aber rein ums Prinzip, da ich ja mit dem Browser keine solche Bot-Erkennung bekomme.

Wie kann ich also meine Methode menschlicher machen? Einen Timeout habe ich schon probiert, könnte sein, dass der nicht groß genug ist? In der Rückgabe, der Seite steht allerdings auch, dass es sein könnte, dass mein Browser keine Cookies unterstützt.

Java:
static LinkedList<String> getSource(String uri) throws MalformedURLException, IOException
	{
	String line = null;
	String userAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0";
	LinkedList<String> Source = new LinkedList<String>();
	
	URL url = new URL(uri);
	HttpURLConnection connection = (HttpURLConnection)url.openConnection();
	
	connection.setRequestMethod("GET");
	connection.addRequestProperty("User-Agent", userAgent);
	connection.setConnectTimeout(1000);
	HttpURLConnection.setFollowRedirects(false);
	
	connection.connect();
	
	BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
	
	while(((line = rd.readLine()) != null))
	{
       Source.add(line);
    }
	connection.disconnect();
    
	return Source;
	}
 
I

irgendjemand

Gast
wenn du vom "erfinder" dieses bot-schutzes schon den ach so tollen hinweis bekommst das dieser auf COOKIEs basiert ... dann brauchst du nur das COOKIE aus dem response auslesen und bei jedem neuen request wieder reinsetzen ... fertig ...


*ohne den entwickler selbst zu kennen oder schlecht zu stellen ... aber wenn man einem potentiellen angreifer auch noch sagt wie der schutz-mechanismus funktioniert ... dann hat man seine aufgabe ganz klar verfehlt*
 

moccajoghurt

Bekanntes Mitglied
Mit HtmlUnit könntest du solche Bot-Schutzmaßnahmen umgehen, weil es sich wie ein echter Browser verhält. Da spart man sich einiges an Arbeit, weil man die Cookies nicht "per Hand" behandeln muss.
 

Empire Phoenix

Top Contributor
Rein theoretisch, kann es sein das der webserver einfach ide geschwindigkeit mitprotokoliert, und das captcha immer kommt wenn man zu schnell seiten aufruft? (Würde ich zumindest als ansatz benutzen)
 

FaxXer

Mitglied
Danke für eure Antworten schonmal, ich hab leider grad wenig Zweit werde aber alle Ansätze mal ausprobieren.
Falls überhaupt nichts klappt, schreibe ich einfach mal den Entwickler der Seite an.. Denk nicht das der was gegen mein Vorhaben hatt.
Ja das Captcha ausfüllen wäre natürlich Super :D
Gruß
 
I

irgendjemand

Gast
defacto : du bekommst eine meldung das du mit einem bot auf die page zugreifst ... und bekommst dann den hinweis das dein system möglicher weise keine cookies unterstüzt

also wäre der erste schritt den du machen müsstest : erstmal dein bot so bauen das er mit cookies umgehen kann ...

ich sags zwar nicht gern : schau dir mal apache http commons oder andere libs an

zweitens : captcha cracken

ist für mich ein leichtes da ich mich damit 2 jahre aus ein ander gesetzt habe und immer wieder festgestellt habe das es da draußen immer wen gibt der einen schritt besser ist als ich und meine captchas geknackt bekommt ...
und dabei habe ich schon so einige anti-captcha methoden ausprobiert und da gegen gesichert

es gibt immer wen der n stück schlauer ist als du und desshalb entweder dein anti-bot system knackt ... oder wie ich : der auf der anderen seite sitz und genau dies verhindert ...

ich kann dir noch alte codes und demo-seiten geben ... weis aber nicht ob diese noch alle funktionieren ...

am einfachsten sind diese : "klick mich" bilder ... einfach n muster erkennen ...
schwieriger werden dann schon die : "text eingeben" ... ist aber auch nicht so schwer ... musst nur das captcha durch gehen und alle dir bekannten zeichen erkennen .. diese bringst du dann noch in die richtige reihenfolge ... auch drin ...

weiter ins detail möchte ich hier jedoch nicht gehen da ich sonst zu viele hints geben würde


@e-phoenix
ähm .. das glaub ich kaum ... weil so n browser in der regel mit 10 oder mehr HTTP/1.1 connections auf die seite losgeht um den content möglichst schnell zu laden ... das musst du erstmal nachgebaut bekommen ... also sollte das wohl eher nicht der grund sein
 

FaxXer

Mitglied
Sodele hab heute mal Zeit gehabt um etwas rumzuprobieren. Und Cookies einzubauen. Das Problem besteht allerdings immer noch...
Hier mal mein Code, falls ich bei den Cookies irgendwas falsch gemacht habe.

Java:
static LinkedList<String> getSource(String uri) throws MalformedURLException, IOException
	{
	String line = null;
	String userAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0";
	LinkedList<String> Source = new LinkedList<String>();
	LinkedList<String> cookie = null;
	String cock = null;
	String cookieName = null;
	String cookieValue = null;
	
	cookie = getCookie(uri);
	
	URL url = new URL(uri);
	HttpURLConnection connection = (HttpURLConnection)url.openConnection();
	
	connection.setRequestMethod("GET");
	connection.addRequestProperty("User-Agent", userAgent);
	HttpURLConnection.setFollowRedirects(false);
	
	for(int i = 0; i < cookie.size(); i++)
	{
	cock = cookie.get(i);
	cock = cock.substring(0, cock.indexOf(";"));
	cookieName = cock.substring(0, cock.indexOf("="));
    cookieValue = cock.substring(cock.indexOf("=") + 1, cock.length());
	connection.setRequestProperty(cookieName, cookieValue);
	}
	
	connection.connect();
	
	BufferedReader rd = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
	
	while(((line = rd.readLine()) != null))
	{
       Source.add(line);
    }
	connection.disconnect();
    
	return Source;
	}

	static LinkedList<String> getCookie(String uri) throws IOException
	{
		String userAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0";
		URL url = new URL(uri);
		HttpURLConnection connection = (HttpURLConnection)url.openConnection();
		connection.setRequestMethod("GET");
		connection.addRequestProperty("User-Agent", userAgent);
		HttpURLConnection.setFollowRedirects(false);
		connection.connect();
		LinkedList<String> cookie = new LinkedList<String>();
			String headerName = null;
			for (int i = 1; (headerName = connection.getHeaderFieldKey(i))!=null; i++) {
			 	if (headerName.equals("Set-Cookie")) {    
				cookie.add(connection.getHeaderField(i));
			 	}
			 	}
			connection.disconnect();
	return cookie;
	}

Ist wahrscheinlich nicht grad die einfachste Lösung aber sollte ja funktionieren? Ist jetzt aber dumm, das Captcha ist das von Google.. Also denk ich mal nicht einfach zum übergehen.

@irgendjemand hast du Erfahrung mit diesen Google Captchas? Immer her mit deinem Beispiel Code :)

Allerdings muss das Script ja irgendwie erkennen, dass ich kein Mensch bin. Man müsste halt nur herausfinden, was es überprüft.

Ich schreibe jetzt aufjedenfall mal den Betreiber der Seite an. Man kann ja Glück haben..
 
I

irgendjemand

Gast
google-captchas sind schon ne harte nummer ... geb ich ja zu ... allerdings sind es bei weitem nicht die schwierigsten ...

habe ich erfahrungen mit g-captchas : ja
habe ich es schon mal geschafft welche zu knacken : auch ja
habe ich grade source da : leider nein ...
da mein rechner gerade akut am streiken ist ... und ich leider kein externes gerät zum ankoppel einer S-ATA platte habe kann ich leider nicht auf diese daten zu greifen *schreibe grad von meinem laptop*

du hast aber recht : warum kommt diese meldung nur bei deinem "bot" ... nicht aber im browser ?

ich würde den traffic erstmal mit wireshark checken und dabei auf unregelmäßigkeiten achten ...
es kann auch sein das das script den kompletten header auswertet und informationen sendet welche der browser so interpretiert und dadurch auch wieder informationen zurückschickt die dem script zeigen : aha ... browser mit vermeintlichem mensch ...

man müsste das ganze system analysiren und den kompletten traffic nachbauen ...

da ich aber leider wie gesagt grade nicht an mein system kann bringt es auch nichts wenn ich dich mal eben nach der page frage da mir die mittel fehlen es selbst zu checken ... sorry
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
D WebSocket send Methode verschickt nichts! Netzwerkprogrammierung 3
J Rückgabewert bei Run()-Methode Netzwerkprogrammierung 9
C Socket Identifikation des clients nach der accept() Methode Netzwerkprogrammierung 2
Dit_ RMI RMI-Server und gleichzeitiger Aufruf einer Methode Netzwerkprogrammierung 14
D Client Server Problem, Methode readline() löst SocketException "Connection reset" aus Netzwerkprogrammierung 8
L JavaScript Methode mit Java aufrufen Netzwerkprogrammierung 40
N Per POST -Methode Daten an den Web-Server übertragen. Netzwerkprogrammierung 9
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
S Blockierende RMI Methode Netzwerkprogrammierung 3
S Daten per GET-Methode Netzwerkprogrammierung 2
A RMI: Wo wird die Methode ausgeführt? Netzwerkprogrammierung 9
A Methode zum ermitteln des DHCP-Servers & DNS-Servers? Netzwerkprogrammierung 8
C RMI: Problem beim Aufruf einer Methode. Falsch gecastet? Netzwerkprogrammierung 8
T finlalize Methode vom Server wird nicht aufgerufen Netzwerkprogrammierung 4
N Server accept-Methode zeitlich begrenzen Netzwerkprogrammierung 2
D beste Methode für Datenübertragung ? Netzwerkprogrammierung 1
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
OnDemand JMS Messages wird gecached Netzwerkprogrammierung 2
P RMI stub wird nicht gefunden Netzwerkprogrammierung 8
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
M com.google.gson wird nicht erkannt Netzwerkprogrammierung 2
F Website parsen, die mit javascript zusammengebaut wird Netzwerkprogrammierung 1
P Socket Server übertragung wird immer langsamer Netzwerkprogrammierung 4
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
L Server anpingen (Pingzeit) ?? Pingzeit wird nicht verändert Netzwerkprogrammierung 6
M JSP wird im gesamten Projekt nicht neugeladen Netzwerkprogrammierung 3
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
R Socket SSL-Connect in Servlet - keystore wird nicht gefunden Netzwerkprogrammierung 2
S anderer Rechner wird nicht gefunden Netzwerkprogrammierung 20
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
X Änderung des Objekts wird nicht serialisiert Netzwerkprogrammierung 9
M Socket TCP keep alive Exception wird nicht ausgelöst Netzwerkprogrammierung 11
Dit_ RMI setSoTimeout wird ignoriert? Netzwerkprogrammierung 3
lumo String[] wird zu null bei Serialisierung Netzwerkprogrammierung 8
J method = PUT, aber ausgeführt wird doGet...? Netzwerkprogrammierung 4
K Was wird genau per Telnet verschickt ? Netzwerkprogrammierung 5
M Dateidownload per FTP wird immer langsamer und bleibt dann stehen Netzwerkprogrammierung 3
J BufferedReader.ready() wird nicht true Netzwerkprogrammierung 10
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
C RMI Klasse wird unter falschem Pfad gesucht Netzwerkprogrammierung 4
B Server-Programm wird durch "read" beendet Netzwerkprogrammierung 8
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
N Socket Verbindung wird immer verweigert Netzwerkprogrammierung 5
K HTTP-Anfrage an einen Server wird nicht beantwortet Netzwerkprogrammierung 3
M URL Handler wird nicht gefunden Netzwerkprogrammierung 6
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4
L Https Verbindung wird aus jar heraus nicht aufgebaut Netzwerkprogrammierung 12
C Download-Fortschritt wird falsch angezeigt. Netzwerkprogrammierung 2
A Quellcode von Homepage wird nicht komplett eingelesen Netzwerkprogrammierung 5
V RMI: code wird einfach übergangen ? Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
F Stream wird als Char übertragen. Char -> in String umwand Netzwerkprogrammierung 5
L RMI-Funktion wird lokal ausgeführt Netzwerkprogrammierung 12
P JNDI LDAP-SSL Verbindung, Zertifikat wird nicht angezeigt ? Netzwerkprogrammierung 2
A JavaMail Problem - Nachricht wird nicht versendet ? Netzwerkprogrammierung 9
B Socket wird nicht richtig geschlossen Netzwerkprogrammierung 2
K mapSystemException wird geworfen Netzwerkprogrammierung 2
L Attachment wird nicht angezeigt in der Email Netzwerkprogrammierung 3
P RMI - meine Stub-Class wird nicht gefunden Netzwerkprogrammierung 9
G Socket wird nach Portscann geschlossen Netzwerkprogrammierung 2
R Socket wird nicht ausgeführt Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben