Autor Zpráva
holi
Profil
Zdravím,
na internátě mám stolní počítač a já si zařídil funkčnost WOL(Wake on Lan) na routeru a PC abych si mohl popřípadě doma stáhnout soubory do školy atd. Dále jsem si našel na internetu skript přes PHP abych si to mohl dát na web do administrace. Ježtě bych potřeboval skript který mi ten počítač bude pingovat, jenže pingnout jde pouze router. A ja se chci zeptat jestli to nejde nějak zařídit aby se pingoval přímo počítač abych věděl jestli je zapnutý ... přes nějaký forward nebo něco ... router běží pomocí microtiku, ale přesný tym nevím. Díky.
AM_
Profil
zkus v routeru nastavit:
- forwardování portu 7 pro protokol ICMP, nebo
- DMZ pro daný počítač - to nastaví, že se na daný počítač routuje úplně vše - tudíž se to virtuálně zařídí tak, že se to chová jako by byl počítač připojený přímo bez routeru (router už tím počítač ale nechrání jako firewall).

Mimochodem toto nijak nesouvisí s PHP, ale se síťováním, příště prosím zvaž použití správného fóra.
holi
Profil
no mě šlo spíš o script kterým bych to napingoval už mám na tento pošítač naforwardované dva porty jeden na tu funkci WOL -> port 9(dsnat, UDP) a druhý 3389(dsnat, tcp) na vzdálenou plochu, a jelikož mám na webu script na funkci WOL tak bych u toh chtěl mít i ping k tomuto PC abych věděl jestli je zapnutý nebo ne. Jinak děkuji za odpověd ale toto asi dělat nebudu.
AM_
Profil
no jinak jedině můžeš zkusit, zda se dá připojit na tyto porty (což by mělo znamenat, že je počítač zapnutý a služby běží), jinak to nepůjde.
holi
Profil
no o to jde ten ping potřebuji hlavně kvuli tomu abych poznal jestli je PC zapnut nebo vypnut
TomášK
Profil
holi:
Chceš-li ping, musíš přesměrovat další port. Pokud to neuděláš, ping nebude. Způsoby jak přesměrovat viz [#2] AM.
holi
Profil
kdybych teoreticky vytvořil aplikaci která by byla schopná se spustit s bootovaním windows(protože kdyby to bylo normálně po spuštění tak by to čekalo až se přihlásím), mohu se zeptat jestli by šlo že by něco poslala a nějaký php script ji přijal ? zatím jsem vykoumal to že by prostě poslala přes ftp txt soubor, ale to mi přijde trochu neohrabané, jestli by šlo že by poslala nějaké packety, a php by je odchytlo ... kdyby třeba nedošly po 2 sekundách, znamenalo by to že PC je off a na stránkách by se mi to vypasalo, ale to je dost stupidní tohle napsat, spíše to odeslání a přijmutí informace.
holi
Profil
<!--Odeslaný script aplikací v PC-->
<html>
<body>
<form action="http://example/autobus.php" method="POST" >
<input type="hidden" name="stav" value="on">
</form>
</body>
</html>

<?php
//soubor http://example/autobus.php
if (isset($_POST['stav'])){$stav = "Online";}
else{$stav = "Online";}
echo "Počítač je ".$stav;
?>

Šlo by to ? Vím že si to mám vyzkoušet jenže zrovna nemám přístup k dotyčnému počítači...




EDIT:// tka jsem se na to podíval znova a uvážil že to nebude fungovat ... přece jenom $_POST nepřebýrá cely HTML kod že ... ? takže se to musí udělat jinak, kamarád který bude psát aplikaci na odeslání si vytvoří jednoduchý formuláš který odesílá nějakou hodnotu přes POST do jiného souboru, odchytne packety které jsou v podstatě přenášeny, upraví je tak aby odesílaly to co chceme mi a pak něchá aplikaci aby je odeslala...
TomášK
Profil
holi:
Chceš-li se zvenku jakkoliv připojit, musíš přesměrovat další port nebo využít přesměrovaného portu. Je jedno, jestli přesměruješ ping nebo http nebo se budeš koukat na port 3389, jestli funguje vzdálená plocha. Bez toho můžeš vymýšlet cokoliv, ale nebude to fungovat. Je nějaký problém přesměrovat třetí port, když už máš dva přesměrované?
holi
Profil
AM:
(router už tím počítač ale nechrání jako firewall).
V tomto je problém ...
AM_
Profil
[#10] holi
jak sis mohl všimnout, stačí splnit jen jednu z podmínek - přesměrovat na daný počítač pouze ping, tedy ICMP pakety (případně konkrétně port 7). DMZ je dělo na komára, ale je to také řešení, proto jsem jej uvedl.
Další řešení jsem uváděl pomocí php sockets se připojit na některý z již otevřených portů a jen ověřit, že se připojení navázalo.
Jinak to rozumně nepůjde, nemá smysl vymýšlet kraviny jako každé dvě sekundy posílat něco někam na server.
holi
Profil
ano jistě já myslel že už jiná možnost není toto je dobré řešení s tím jestli se spojení navázalo ... teď mě jen zajímá jak pingnu určitý port ? dejme tomu že IP adresa je 192.168.1.1 ... jako veřejná pro router, mám otevřené porty 9 a 3389, jak docílím toho abych napingnul(ověřil zda spojení bylo navázáno) port třeba 9 ? našel jsem jeden moc pěkný script který splnuje přesně to co chci. Ale nevím jak do něj zavés právě ten port.

<?php 
$ips_array=array("PC_1_NAME:192.168.x.x", "PC_2_NAME:192.168.x.x", "PC_3_NAME:192.168.x.x"); // you have to write here a descriptive name for every PC to be monitored and its IP address --> name:ipaddress 
////////// END OF CONFIGURATION ////////// 
function ping($PC, $ip){ 
$cmd=shell_exec("ping -c 1 -w 1 $ip"); 

  $dati_mount=explode(", ", $cmd); 
  if (eregi ("0",  $dati_mount[1],  $out)) {$connesso="<img src=\"off.gif\">";} 
  if (eregi ("1",  $dati_mount[1],  $out)) {$connesso="<img src=\"on.gif\">";} 
  $esito="$connesso [$ip] <b>$PC</b><br>"; 
return $esito; 
} 

while(list($k, $v)=each($ips_array)){ 
 $dati_ip=explode(":", $v); 
 $esito=ping($dati_ip[0], $dati_ip[1]); 
 echo $esito; 
} 
?>
AM_
Profil
port nemůžeš pingovat, pinguje se dané síťové rozhraní a služba běží přes port 7. S portem můžeš pouze zkusit navázat spojení přes php sockets, a to buď půjde, nebo nepůjde. Funkce php sockets a jak se používají snadno vygooglíš.
Davex
Profil
AM:
port nemůžeš pingovat
Pokud použije program tcpping, tak může pingovat na TCP port. V PHP to přes sokety také jde.

pinguje se dané síťové rozhraní a služba běží přes port 7
Klasický ping používá protokol ICMP a tam žádné porty, jak je známe z protokolů UDP a TCP, nejsou. UDP port 7 je určen pro zcela jinou službu, která by měla být z bezpečnostních důvodů vypnutá.
AM_
Profil
Davex:
Pokud použije program tcpping, tak může pingovat na TCP port.
no ale není to ping v pravém slova smyslu, je to něco jako jsem říkal - prostě test, zda se lze na danou adresu a port připojit.

Klasický ping používá protokol ICMP a tam žádné porty, jak je známe z protokolů UDP a TCP, nejsou
http://en.wikipedia.org/wiki/Echo_Protocol
- což je vlastně varianta pingu, ale máš pravdu, klasický ping běží bez portů, vždycky mi bylo divné že jsem někde četl o pingu přes port 7 a přitom je to ICMP.
holi
Profil
Zdravím, chci se omluvit za neaktivitu, zprvu jsem funkci na otevření socketu nepochopil tak jsem od toho upustil. Ted jsem se k tomu vrátil a myslím že jsem to vpodstatě pochopil nebo lépe vím jak to napsat. Ale potřeboval bych poradit. Mám na to script, ten sice funguje, pokud si např zkusím na svém localhostu tudiž 127.0.0.1:80 script vyhodí online, jenže pokud vyzkouším cílový port k počítači který je uplně odpojen od sítě, tak mi to sice správně vyhodí offline, jenže k tomu šílenou chybu o tom že se socket nepodařilo otevřit, což je z hlediska designu webu nepoužitelné. Takže otázka zní jak té chybě zabránit. viz script:
<?php
$fp = fsockopen("127.0.0.1", 80, $errno, $errstr, 5);
if (!$fp) {
    echo "Offline";
} else {
    echo "Online";
}
?>    



//edit: chyba vypadá takto(IP je sice localhost(všimněte si portu, na portu 80 mi script vyhodí online jak ma), ale vyhodilo to tu chybu co to háže u vzdáleného PC)
Warning: fsockopen() [function.fsockopen]: unable to connect to 127.0.0.1:1337 (Nemohlo být vytvořeno žádné připojení, protože cílový počítač je aktivně odmítl. ) in C:\xampp\htdocs\www\test\socket_open.php on line 2
Offline

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: