Keine Verbindung nach außen möglich?

Quali

New Member
Hallo an alle,

ich habe einen Server und betreibe darauf eine Webseite mit einem Woltlab Forum. Nun wollte ich die automatischen Updates nutzen, aber scheinbar kann dazu keine Verbindung aufgebaut werden.

Da ich weiss, das es nicht an der Forumsoftware liegen kann, suche ich den Fehler auf meinem Server, bisher vergeblich.

Mit einem Script, was ich hier mal angehangen habe, erhalte ich eine "Resource id #2" Meldung, denke das ist nicht korrekt, aber vll weiss jemand wieso diese Auftritt. Danke im voraus.

Code:
<?php
 error_reporting(E_ALL);

$handle = fopen('http://www.google.de', 'r');
echo $handle;
fclose($handle);

?>
 
Wenn du das HANDLE ausgibst bringt dir das auch nix, damit arbeitet PHP intern. Du musst z.B. fread nehmen um das Handle auszulesen.


Ganz davon abgesehen ist die Frage über welchen Port Woltlab das Upgrade versucht und ob dieser Port entsprechend freigeschaltet ist.
 
Kannst du mir das mal als Script posten? Ich werde mal checken worüber woltlab die updates schickt. (Port)

Danke aber schon mal für die Antwort.
 
Siehe php.net


PHP:
$handle = fopen("http://www.example.com/", "rb");
$contents = stream_get_contents($handle);
fclose($handle);

PHP:
<?php
$handle = fopen("http://www.example.com/", "rb");
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
?>


Content kannst du dann auslesen.
 
Wenn ich dieses ausführe, bekomme ich entweder ne weisse Seite oder 500.

In der error.log steht dann sowas: (ist nur ein kurzer ausschnitt)

[Fri Jul 02 14:11:15 2010] [warn] mod_fcgid: stderr: PHP Warning: fread(): supplied argument is not a valid stream resource in /var/syscp/webs/home/test.php on line 6
[Fri Jul 02 14:11:15 2010] [warn] mod_fcgid: stderr: PHP Warning: feof(): supplied argument is not a valid stream resource in /var/syscp/webs/home/test.php on line 5
[Fri Jul 02 14:11:15 2010] [warn] mod_fcgid: stderr: PHP Warning: fread(): supplied argument is not a valid stream resource in /var/syscp/webs/home/test.php on line 6
[Fri Jul 02 14:11:15 2010] [warn] mod_fcgid: stderr: PHP Warning: feof(): supplied argument is not a valid stream resource in /var/syscp/webs/home/test.php on line 5
 
Hallo,

Leider hast du nicht geschrieben, um welche php Version es sich handelt aber kann es sein, dass allow_url_fopen in der php.ini auf off steht ?

;;;;;;;;;;;;;;;;;;
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;

; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
allow_url_fopen = On
 
Bin mir ziemlich sicher, dass ich alle php.ini Dateien mit allow_url_fopen = On versehen habe.

mit locate php.ini habe ich alle Dateien gefunden und danach alle angeschaut.

Hier mal die phpinfo: Link entfernt^^
 
Last edited by a moderator:
fopen ist erlaubt, es wird ja auch über fread und feof gemeckert.
Und jetzt lösch die phpinfo Datei mal lieber ganz schnell wieder...;)
 
Mit einem Script, was ich hier mal angehangen habe, erhalte ich eine "Resource id #2" Meldung
Das ist relativ korrekt und zumindest besser als ein false ;)

Dass er im letzteren ueber fread meckert laesst darauf schliessen dass der Handle nicht (mehr) offen ist, die Verbindung also fehlgeschlagen ist oder unterbrochen wurde.


Teste das mal:
PHP:
<?php
$handle = fopen("http://www.heise.de/", "r");
if(!$handle) die("Konnte Verbindung nicht oeffnen. ".var_dump($handle));
echo "Verbindung offen: ".var_dump($handle)." <br>".PHP_EOL;
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
echo "<b>Erfolg:</b> <br><br>".PHP_EOL.PHP_EOL.$contents;
?>

Uebrigens hat PHP eine viel einfachere Methode ein Dokument aus zu lesen:
PHP:
<?php
echo file_get_contents('http://www.heise.de');
?>
 
Dann blockiert entweder dein Provider, deine Firewall oder sonstiges die Verbindung ;)

Versuch mal auf der Kommandokonsole:
Code:
telnet google.de 80
Wenn es klappt, mittels sudo nochmal als der Benutzer unter welchem das Script ausgefuehrt wird (www-data, wwwdata, oder <benutzername>)

Edit: du haettest nicht mittels "locate" alle php.ini suchen und bearbeiten muessen, die korrekte wird in der phpinfo angezeigt
Die unter /etc/php5/conf.d/ abgelegten .ini-Dateien enthalten nur die Lade- und Konfigurationsinstruktionen der jeweiligen Erweiterung, meist nur "extension=BLA.so". Uebrigens sparst du etwas Disk-IO indem du sie alle in eine einzelne Datei schmeisst
cat /etc/php5/conf.d/*.ini > /etc/php5/conf.d/loadall && rm /etc/php5/conf.d/*.ini && mv /etc/php5/conf.d/loadall /etc/php5/conf.d/loadall.ini
Uebrigens ist das "Sicherheitsloch" einer verlinkten phpinfo relativ gering, mir sind zumindest keine version-spezifischen Exploits bekannt.
 
Last edited by a moderator:
srv:~# telnet google.de 80
-bash: telnet: command not found

Hm.......

Bin als root eingeloggt.


EDIT: Also ich habe ja Syscp und da ist ja eine allgemeine php.ini die man im Adminpanel bearbeiten kann. Diese hat auch fopen auf on und ich hab nur Sicherheitshalber alle durchgeschaut.
 
Last edited by a moderator:
Dann installier telnet =) Da hat dir der Betreiber wohl ein wirklich minimalistisches gegeben (gut so :D kein unnuetzer Muell)

Unter Debian/Ubuntu/...: aptitude install telnet
 
Ok installiert :rolleyes:

Trying ::ffff:188.40.96.82...
Connected to google.de.wii-homebrew.com.
Escape character is '^]'.

Kommt da noch was?

Connection closed by foreign host.

Das kam als ich dann 2x mal oder so enter gedrückt hatte. Ich lass es nochmal so ohne enter :confused:
 
Nein das ist richtig so.
Wenn du eine Ausgabe sehen willst musst du folgendes eintippen:
"GET HTTP/1.1 /" gefolgt von 2x ENTER.
Dann antwortet der Server dir mit einem 302 Found und etwas Text :)

Allerdings ist dein Server falsch konfiguriert, er nimmt an dass 'google.de' eine Subdomain von deinem Server sei ;)
Versuch mal folgendes:
"telnet google.de. 80"

Falls es funktioniert:

Aender PHP-Skript testweise folgendermassen: Der finale Punkt gibt an dass es eine absolute Domain ist und sollte auf die IP aufloesen.
PHP:
<?php
$handle = fopen("http://www.heise.de./", "r");
if(!$handle) die("Konnte Verbindung nicht oeffnen. ".var_dump($handle));
echo "Verbindung offen: ".var_dump($handle)." <br>".PHP_EOL;
$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);
echo "<b>Erfolg:</b> <br><br>".PHP_EOL.PHP_EOL.$contents;
?>
 
srv:/etc/php5/conf.d# telnet google.de. 80
Trying 72.14.221.104...
Connected to google.de.
Escape character is '^]'.


Das Skript geändert und dann kommt folgendes, den REst von Heise hab ich aber weggelassen.^^

resource(2) of type (stream) Verbindung offen:
Erfolg:

Scheint echt so zu sein, das es falsch erkannt wird. Hm nur gibts dafür ne Noobsichere Lösung? :(




---------------

Ich hab nochmal den Befehl von vorhin genommen und das Get HTTP nachträglich eingefügt, dann kam so etwas. Vll hilft es.

srv:/etc/php5/conf.d# telnet google.de 80
Trying ::ffff:188.40.96.82...
Connected to google.de.wii-homebrew.com.
Escape character is '^]'.
GET HTTP/1.1 /

HTTP/1.1 400 Bad Request
Date: Fri, 02 Jul 2010 15:47:05 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 296
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache Server at srv.wii-homebrew.com Port 80</address>
</body></html>
Connection closed by foreign host.
 
Last edited by a moderator:
In der conf steht

### Hetzner Online AG installimage
# nameserver config
nameserver 213.133.98.98
nameserver 213.133.99.99
nameserver 213.133.100.100

Es war eine ganz normale Installation von Hetzner. Syscp + Debian (Lenny)

EDIT: Was ist ( lsof -i :53 )?
 
lsof -i :53
gibt an ob aktuell Verbindungen auf Port 53, DNS, aktiv sind und ob da ein Dienst am lauschen ist und wenn ja welcher (PID + PRozessname)

Folgendes verraet uns eventuell den Fehler
dig A google.de
 
Back
Top