# IP anpingen



## Sebastian Wramba (1. Mai 2002)

also wenn ich in der DOS-Eingabeaufforderung ping 123.123.123.1 eingebe, kommt ja eine bestimmte Antwort (oder auch nicht  ).
Meine Frag nun: Wie kann ich in PHP eine IP anpingen? Sodass ich rausfinden kann ob derjenige online ist oder nicht...

mfg gouraud


----------



## brÅinstorm (1. Mai 2002)

ich hab früher auch schon mal lange nach soetwas gesucht.
es scheint, als gäbe es das nicht.
und es passt auch gar nicht in die vorgesehene Nutzung von php.
aber wenn jemand weiß wie, ich warte. =)


----------



## Sebastian Wramba (1. Mai 2002)

also da ich nen localhost-server pingen wollte hab ichs jetzt so gelöst:

```
<?
$ip = file("ip.txt");
$site = "http://".$ip."/";
$fp = @fopen("$site","r");
if ($fp) 
{
fclose($fp);
echo "<a href=\"".$site."\" target=\"_blank\">online</a>";
}
else { 
echo "offline";
}
```


----------



## Wolf of Doom (1. Mai 2002)

ich hab da noch ne loesung


```
<? echo "<font face=\"Verdana\" size=\"2\">";
$sock = fsockopen('hier die ip eintragen', 21, &$errno, &$errstr, 5); if(!is_resource($sock)) { echo "<font color=\"#FF0000\" size=\"1\">offline</font>"; } else { echo "<font color=\"#00BF00\" size=\"1\">online</font>"; }
?>
```


cya

wolf


----------



## Sebastian Wramba (1. Mai 2002)

ok danke, werd's mal ausprobieren


----------



## Matthias Reitinger (1. Mai 2002)

Na ja, die Möglichkeiten von Wolf of Doom funktioniert allerdings nur, wenn ein Prozess auf dem Zielrechner einen Listen-Socket auf Port 21 offen hat. Das ist halt meistens ein Webserver, muss es aber nicht sein.

Die Methode von gouraund erfordert sogar explizit einen funktionsfähigen Webserver an Port 21.

Einen echten Packet Internet Groper kann man nur mit PHP wohl nicht realisieren, da dazu ein ICMP (Internet Control Message Protocol) ECHO Request an den Zielrechner gesendet werden müsste. Und dieser steht im Header eines IP-Pakets. Auf die IP-Ebene kommt man aber leider mit keinem mir bekannten PHP-Befehl herunter. Ergo kein echter PING mit PHP. Bleiben eben nur die genannten Ausweichsmöglichkeiten.


reima


----------



## LokoDark (2. Mai 2002)

Hi,

also ich habe sowas auch einmal geproggt. Dieses Skript läuft aber nur auf Windows Servern, bei Linux musst Du den befehl etwas modifizieren.

<!-- Hier wird der Ping zum online/offline Test ausgeführt -->

<html>
<body>

<font face=Arial color=black size=4><b>Rechner online/offline ?</b></font><br><br>
<table width=90% border=0>
<tr>
  <th width="45%" bgcolor=#e90055><font face=Arial color=white size=2>Pinganweisung</font><th>

  <th width="45%" bgcolor=#ffffff>
        <font face=Arial color=black size=2>
  	<br>
  	<form action="ping.php" method="get">
        <br>

        <input type="text" name="ip" value="<? echo $ip; ?>">
        <Input type="Submit" name="send" value="Ping senden">
        </form>  
        </font>
  <th>
</tr>
<tr>
<th width="45%" bgcolor=#e90055>
<font face=Arial color=white size=2>Systemmeldung</font><br>
<th>
<th width="45%">
<font face=Arial color=black size=1>

<?


if($ip)
{
  //Pingbefehl
  $eingabetext = system ("ping $ip -n 1");
  $suchtext = "Timeout"; 

  //Hier wird nach dem Suchtext gesucht. Ist kein Rechner da kommt  die Fehlermeldung mit Timeout, danach wird gesucht. Wird Timeout gefunden, dann ist der Rechner nicht online.
  $temp = strpos($eingabetext,"$suchtext"); 

   if ($temp=="")
      echo "<br><br>Der Rechner mit der IP ".$ip." ist online";
   else
      echo "<br><br>Der Rechner mit der IP ".$ip." ist offline";
}

?>

</font><br>
<th>
</tr>


</table>

</body>
</html>


So ich hoffe, dass konnte Dir was helfen.

Gruß
Loko


----------



## Sebastian Wramba (2. Mai 2002)

auch danke für die möglichkeit


----------



## Sebastian Wramba (2. Mai 2002)

ich hab nun ein kleines script gebastelt, dass die ip beim ausführen in die text-datei schreiben sollte... nur macht ers nicht... wo ist der fehler?

```
<?
function url() {
$ip = file("ip.txt");
$site = "http://".$ip."/";
$fp = @fopen("$site","r");
if ($fp) 
{
fclose($fp);
echo "<a href=\"".$site."\" target=\"_blank\">vinzi.de</a>";
}
else { 
echo "offline";
}
}
function writeip() {
echo "$REMOTE_ADDR";
echo "<br> \n";
$ip = "$REMOTE_ADDR";
if(file_exists("ip.txt")) {
unlink("ip.txt");
echo "Datei gelöscht...<br> \n";
}
if(touch("ip.txt")) {
echo "Datei erstellt...<br> \n";
}
if(chmod("ip.txt",0755)) {
echo "CHMOD 755 erfolgreich...<br> \n";
}
$datei = @fopen("ip.txt","w");
if(fwrite($datei,$ip)) {
echo "IP eingetragen...<br> \n";
}
fclose($datei);
echo "Neue IP:".$ip;
}
switch ($action) {
	default:
	url();
	break;
	case write:
	writeip();
	break;
}
?>
```

Wenn ich ping.php?action=write ausführe kommt folgendes heraus:


```
(<br>)
Datei gelöscht...
Datei erstellt...
CHMOD 755 erfolgreich...
Neue IP:
```

Also $ip bleibt einfach leer, woran liegts?


----------



## Tob (3. Mai 2002)

$REMOTE_ADDR ist nur im "Haubtscript" vorhande entweder du übergibst sie direkt an die Funktion oder du schreibst irgendwo in die Funktion am besten am Anfang :

global $REMOTE_ADDR;

dann müsste es gehen

tob


----------



## Matthias Reitinger (3. Mai 2002)

Anmerkung: Ab PHP 4.2.0 muss/kann man standardmäßig auf das superglobale Array $_SERVER zurückgreifen, wenn man die IP-Adresse des Clients abfragen will. Heißt dann $_SERVER['REMOTE_ADDR'] anstatt $REMOTE_ADDR. Da dieses Array superglobal ist, ist es auch in überall ohne explizite global-Definition verfügbar.


reima


----------



## Nitromaus (3. Mai 2002)

Mit diesen Spezialvariablen wie remote_addr, gibt es da irgendwo ne Liste mit all denen.


----------



## Sebastian Wramba (3. Mai 2002)

So siehts jetzt aus, aber das was angezeigt wird, hat sich nicht verändert:


```
<?
function writeip() {
if(file_exists("ip.txt")) {
unlink("ip.txt");
echo "Datei gelöscht...<br> \n";
}
if(touch("ip.txt")) {
echo "Datei erstellt...<br> \n";
}
if(chmod("ip.txt",0755)) {
echo "CHMOD 755 erfolgreich...<br> \n";
}
$datei = @fopen("ip.txt","w");
if(fwrite($datei,$_SERVER['REMOTE_ADDR'])) {
echo "IP eingetragen...<br> \n";
}
fclose($datei);
echo "Neue IP:".$_SERVER['REMOTE_ADDR'];
}
?>
```


----------



## alie (27. Mai 2002)

*blödsinn*

kein webserver läuft auf port 21.

also bringt das fsockopen() auf den 21 port nichts.

wenn derjenige auf port 21 nichts laufen hat, gilter er gleich als offline obwohl er vielleicht auf port 123 nen webserver am laufen hat.

wenn dann port 80

aber macht halt

```
$ping=exex("ping $ip -n 1");
```

mfg


----------



## BigFacker (28. Mai 2002)

Normal so an alle Gurus hier:

FTP @Port 21 (wenn nicht geändert)
Web @Port 80 (wenn nicht geändert)

Hier reden immer alle von Webserver die auf Port 21 laufen...Das gibbet net 

Zum Thema kann ich leider nets sagen


----------



## Bomber (28. Mai 2002)

*düdlidü*


```
for($port=1; port < /*wieviele ports halt gibt :D*/; $port++)
{
$sock = fsockopen('hier die ip eintragen', $port, &$errno, &$errstr, 5); 
if(!is_resource($sock)) { echo "offline"; } else { echo "online" ;}
}
```


----------



## brÅinstorm (29. Mai 2002)

> wieviele ports halt gibt



hehe... einige dienste laufen auch noch auf 4stelligen ports.


----------



## alie (30. Mai 2002)

*tjo*

jetzt ists aber ein portscanner ...


----------



## Bomber (30. Mai 2002)

ich weiss das war ein ->SCHERZ<-.
so ne abfrage würde eh ewig und drei tage dauern.


----------



## Klon (1. Mai 2003)

Ich würds mit der Umrechnung Ip2Long versuchen, ist die möglich sollte der Rechner online sein (kann man bei jedem DialUp User von ausgehen), auf Ports zu connecten bringt nothing, da würde bei mir auf allen Ports blocked/stealthed/tot kommen, weil nämlich überhaupt nichts zurück kommen würde und auch keine Verbindung aufgebaut würde.

Aber ich hab keine Ahnung von PHP, nur ein Denkansatz.


----------



## wha (2. Mai 2003)

das ist läuft auf den meisten webspace warscheinlich nicht

besonders nicht auf free webspaces


----------



## Tim C. (2. Mai 2003)

Ausserdem ist das Problem ziemlich genau ein Jahr alt


----------



## Fabian H (2. Mai 2003)

Und an alle dies wissen wollen: Es gibt insgesamt 65535 ( (2^16) - 1 ) Ports. Davon sind alle von 0-1023 ( (2^10) - 1 ) Well Known Ports, sind also fest belegt (FTP, Webserver, SMTP usw.) Alle Ports ab 1024 können von beliebigen Programmen belegt werden (Beispiel 6776: Subseven (Naja, mir is grad nix besseres eingefallen)).

Und um jemanden anzupingen: Ich glaube mit fsockeopen sollte bei Port 0 immerwas zurückkommen, wenn der PC an is / die IP gültig ist.


----------



## Tim C. (2. Mai 2003)

Nee Nuinmundo wenn der Port zu ist, kann fsockopen sich nicht damit verbinden und damit würde false kommen.

Aber was spricht denn eigentlich gegen den system oder shell_exec befehl ?


----------



## Fabian H (2. Mai 2003)

> _Original geschrieben von leuchte _
> *Aber was spricht denn eigentlich gegen den system oder shell_exec befehl ?*


Nichts 

Wobei es auch Tolls gibt (die allerdings weniger verwendet werden) mit denen sogar der Ping-Befehl machtlos ist. Wenn man`s allerdings so sieht, kann mans auch gleich vergessen


----------



## Wolfsbein (3. Mai 2003)

> _Original geschrieben von Nuinmundo _
> *..Wobei es auch Tolls gibt (die allerdings weniger verwendet werden) mit denen sogar der Ping-Befehl machtlos ist...*


Was meinst du mit Tolls|Tools? Du kannst jeden Webserver so konfigurieren, dass er auf Pings nicht reagiert.


----------



## Klon (3. Mai 2003)

Vielleicht hilft das noch weiter:


```
function valid_ip($ip)
{
 if(!is_string($ip))
   return false;
$ip_long = ip2long($ip);
 $ip_reverse = long2ip($ip_long);
  if($ip == $ip_reverse)
     return true;
   else
     return false;
}
```

Die Umrechnung IP -> Adresse funzt egal welche Einstellungen oder Firewallings auf der entsprechenden Kiste laufen, ist ja Sache des dazu gehörigen Nameservers.


----------



## planlosShorty (29. August 2005)

Ich habe da ein anderes Problem und zwar möchte ich auch einen Server anpingen, allerdings soll er es unterbrechen, wenn der Ping größer ist als ein bestimmter Wert, weil bei mir lädt er ab und zu eine Seite total langsam, weil ein externes Script nicht schnell genug geladen wird und das soll er dann unterbrechen!

Bitte um Hilfe! Danke!


----------



## Dennis Wronka (30. August 2005)

Wenn ich diesen Thread so sehe haette ich mal mein Script ein paar Jahre frueher schreiben sollen. 
Aber zu der Zeit hab ich selbst mit PHP noch nicht viel gemacht.

Du koenntest es so abaendern, dass nur 1 mal gepingt wird, und dann anhand des Ergebnisses entschieden wird ob abgebrochen werden soll oder nicht.


----------



## planlosShorty (30. August 2005)

Danke ich werde es mal versuchen! Sonst melde ich mich wieder


----------

