Jednoduchou analýzou hlaviček odeslaných internetovým serverem zjistíte typ použitého softwaru na web-serveru. A protože je skript opravdu jednoduchý, rovnou si ukážeme, jak jej začlenit do WAP stránky, kde může nalézt uplatnění v diagnostice systému na dálku pomocí mobilního telefonu.

Je třeba si říct, že ve skutečnosti jde o vypsání řetězce, kterým se server hlásí. Může se tedy stát, že nějaký vtipný administrátor nakonfiguruje svůj Apache server na OS Linux tak, že se bude hlásit třeba jako Internet Information Server, aby tak klamal tělem. Zpravidla se to ovšem nestává, a tak se do jisté míry na tento test lze spolehnout. Součástí toho řetězce kromě použitého softwaru bývají i údaje o dalších dostupných službách na serveru – například PHP, MySQL, SSL ap.

Skript obsahuje jednu kartu, do které se v závislosti na nastavení proměnné "addr" vygeneruje buď formulář pro zadání adresy zjišťovaného serveru nebo rovnou výsledek. Skript lze tedy volat i přímo s parametrem adresy serveru, což může být prostřednictvím mobilního telefonu komplikovanější, ale zase to může ušetřit finance za jinak nutné připojení k zobrazení stránky s formulářem pro zadání adresy. Adresu serveru je možné zadávat doménou nebo jako IP adresu. Pokud chcete diagnostikovat nestandardní server, který poskytuje služby HTTP na jiném portu než 80, změníte ve skriptu číslo portu 80 na vámi požadované.

Skript srvsw.php:

<?PHP header("Content-type: text/vnd.wap.wml") ?> // pomocí PHP odeslat hlavičku WML dokumentu
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<template>  // šablona pro tlačítka telefonu
<do type="prev" label="Zp&#x011B;t"><prev/></do> // tlačítko zpět
<do type="accept" label="Hlavn&#xED;"><go href="index.php"/></do> // tlačítko pro návrat na hlavní stránku
</template>
<card id="srvsw" title="Server SW"> // definice karty
<p>
<?PHP if (empty($addr)) { ?> // do odstavce v kartě vygenerovat formulář pro zadání adresy serveru nebo výsledek
Adresa serveru <input type="text" name="addr" title="Adresa"/><br/> // vstupní pole adresy serveru
<anchor>Zjistit SW<go href="srvstat.php" method="get"> // odkaz pro odeslání formuláře
<postfield name="addr" value="$(addr)"/> // předat obsah pole formuláře addr při odeslání
</go></anchor>
<?PHP
}
else {
  $fp = FSockOpen($addr,80); // otevřít socket na portu 80 serveru (http)
  if ($fp) { // otestovat, zda se podařilo spojit se serverem
    FputS($fp, "HEAD / HTTP/1.0\n\n"); // odeslat standardní hlavičku požadavku
    while ($line=FGetS($fp,128)) { // procházet řádky odpovědi
      if (ERegI("^Server:.*$", $line)) { // zjistit, zda v řádku odpovědi je slovo Server
        echo $line."<br/>";  // vypsat celý řádek
        break;
      }
    }
  FClose($fp); // uzavřít spojení
  }
  else
    echo "Server neodpov&#xED;d&#xE1;<br/>"; // nepodařilo se připojit k serveru
}
?>
</p>
</card>
</wml>

Příklad volání skriptu včetně zadání adresy zjišťovaného serveru:

srvsw.php?addr=www.ibm.com
srvsw.php?addr=212.47.7.203

Na závěr bych upozornil na odeslání hlavičky typu dokumentu na začátku skriptu – ačkoli jde o soubor s příponou PHP (ta je obvykle nutná pro zpracování PHP kódu uvnitř souboru), je odeslána potřebná hlavička dokumentu WML. Další upozornění se týká použití entit v textech vypisovaných na displej telefonu (například v hlášení o nemožnosti připojit se k serveru) – jde o jeden ze způsobů, jak korektně zobrazit znaky s diakritikou na displeji telefonu (konvertovat cestinu muzete napr. na www.pcnet.cz/konvert). Ve skutečném skriptu je nutné vynechat komentáře (neodpovídají syntaxi WML), můžete si jej stáhnout. Část vnořenou v odstavci karty lze vyjmout a po drobných úpravách (zj. formuláře) použít i ve skriptu běžné webové stránky ve formátu HTML.

Žádný příspěvek v diskuzi

Odpovědět