Obecně lze SMS zprávu odeslat několika způsoby, běžnými v komunikaci mezi systémy. Při použití protokolu netGSM (SOAP-HTTP POST) lze XML soubor odeslat pomocí programu cURL, skriptu PHP nebo vyššího programového vybavení, například Nagios.
Funkce http GET umožňuje SMS odeslat pomocí WWW prohlížeče, programů Wget, cURL nebo např. PRTG. V systémech SNMP je pro tento účel využívána funkce Write. Ve všech případech je samotné odeslání poměrně jednoduché a skript nepotřebuje více než pár řádků kódu.
Odesílání SMS prostřednictvím protokolu net GSM
Protokol netGSM je založen na komunikaci prostřednictvím SOAP, neboli odeslání XML souboru pomocí HTTP POST. Popis komunikačního protokolu netGSM naleznete na adrese http://hw-group.us/product-version/netgsm
V pricipu jde o to, že se přes HTTP POST odešle soubor XML (service.xml) v následující podobě:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body> <pos:QueueAdd> <Queue>GsmOut</Queue> <Gsm> <Cmd>SMS</Cmd> <Nmr>123456789</Nmr> <Text>Hello World!</Text> </Gsm> </pos:QueueAdd> </soapenv:Body> </soapenv:Envelope>
Popis jednotlivých parametrů lze dohledat ve výše zmiňovaném popisu protokolu.
Odeslání XML souboru pomocí programu cURL
cURL je řádkový nástroj pro přenos dat po protokolech jako HTTP, FTP a dalších. cURL se skládá ze dvou částí - konzolové aplikace curl.exe a libcurl.dll - knihovny implementujicí všechny funkce programu curl; je možné ji využít při psaní vlastního programu/skriptu (existují vazby pro velkou část jazyků). cURL lze získat zdarma na adrese https://curl.haxx.se/ (https://curl.haxx.se/download.html) a je třeba při stahování pečlivě dbát na to jakou verzi stahujete. 32bitová verze Vám na 64 bitových Windows nebude fungovat, přestože se řádně spustí!
cURL se spouští z příkazového řádku příkazem
curl -X POST -T service.xml 192.168.100.169
kde
-X definuje metodu přenosu, v našem případě POST
-T určuje že se posílá soubor a jak se jmenuje (musí se nacházet ve stejném adresáři jako program curl.exe, jinak je třeba upravit cestu)
IP adresa je adresou HWg-SMS-GW3
V případě, že je HWg-SMS-GW3 zabezpečena uživatelském jménem a heslem, je třeba příkaz doplnit o autentizaci parametrem -u:
curl -X POST -T service.xml -u user:pass 192.168.100.169
odpovědí pak je:
C:\Users\volmr\Desktop\curl>curl -X POST -T service.xml -u user:pass 192.168.100.169 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 375 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0<?xml version="1.0" encoding="utf-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pos="poseidonService.xsd"> <soapenv:Header/> <soapenv:Body> <pos:QueueAddResponse> <Rslt>1</Rslt> <ID>169</ID> </pos:QueueAddResponse> </soapenv:Body> </soapenv:Envelope> 100 667 100 292 100 375 292 375 0:00:01 0:00:01 --:--:-- 657 C:\Users\volmr\Desktop\curl>
Odeslání XML souboru pomocí PHP
PHP je v současnosti asi nejrozšířenější skriptovací jazyk v Open Source sféře tvorby webů. Chcete-li posílat SMS z vašich webových stránek, je to velmi jednoduché a použít lze například tento script:
<?php $type = "SMS"; $nmr = "+420111222333"; $text = "Hello world!"; $host = "mysmsgw.domain.com"; $port = 80; $user = "username"; $pass = "password"; $xml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Header/> <soapenv:Body> <pos:QueueAdd> <Queue>GsmOut</Queue> <Gsm> <Cmd>".$type."</Cmd> <Nmr>".$nmr."</Nmr> <Text>".$text."</Text> </Gsm> </pos:QueueAdd> </soapenv:Body> </soapenv:Envelope>"; $fp = @fsockopen($host, $port, $errno, $errstr, 30); if (!$fp) { echo "$host:$port: $errstr ($errno)\r\n"; } else { fwrite($fp, "POST /service.xml HTTP/1.0\r\n"); fwrite($fp, "User-Agent: MyPHPTest\r\n"); fwrite($fp, sprintf("Host: %s\r\n", $host)); fwrite($fp, sprintf("Authorization: Basic %s\r\n", base64_encode($user . ":" . $pass))); fwrite($fp, sprintf("Content-Length: %d\r\n\r\n", strlen($xml))); fwrite($fp, $xml); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); } ?>
Stačí vyplnit adresu, port, uživatelské jméno a heslo vaší HWg-SMS-GW3 a vše hned funguje. Proměnné $type, $nmr a $text lze pochopitelně přenášet z jiných scriptů.
Odeslání SMS z programu Nagios
Nagios používá skripty psané v jazyce Perl. Pro tyto účely je k dispozici script notify-poseidon-sms.pl od německé firmy Netways, který umí odesílat až 160 znaků pomocí příkazu:
./notify-poseidon-sms.pl -H 192.0.2.10 -M "Test message" -D 123456789
Kde
-H – (Host) IP adresa HWg-SMS-GW3
-M – (Message) text zprávy
-D – (Destination) Telefonní číslo kam se zpráva má poslat
Nepříjemné je, že tento script umí jen zasílat SMS a neumí prozvánět což je však snadná úprava například ve stylu notify-poseidon-call.pl (viz přílohy) a nepodporuje autentizaci na úrovni http.
Příklad použití pod Windows pak vypadá takto:
C:\Users\volmr\Desktop\curl>perl notify-poseidon-sms.pl -H 192.168.100.169 -M "Hello World!" -D 777232759 OK, message sent with ID 1 to '777232759' C:\Users\volmr\Desktop\curl>
Odesílání SMS pomocí funkce HTTP GET
HTTP GET je metoda, při které se všechny parametry předávají přímo v URL adrese. Tato metoda se často používá pro jednoduché aplikace, protože umožňuje snadné ladění a není programátorsky nijak náročná. Stačí volat celou adresu za pomoci příslušných parametrů:
values.xml?Cmd=SMS&Nmr=00420123456789&Text=Hello World!
Kde:
Values.xml – soubor v GW který má příkaz zpracovat. Používá se právě values.xml nebo service.xml
Cmd – příkaz co má GW udělat : SMS – pro odeslání SMS, CALL – pro prozvonění
Nmr – telefonní číslo národním nebo mezinárodním formátu. Místo znaménka „+“ se doporučuje používat 00, aby klienti neměli potřebu nahrazovat znak „+“ entitou
Text – Vlastní text zprávy v UTF-8
Nepříjemné je, že metoda HTTP GET je nativní pro zobrazování WWW stránek a nelze ji tedy jednoduše zabezpečit proti zneužití (bylo by třeba nastavit WWW Security, což naopak znemožní volné prohlížení webu HWg-SMS-GW3). Navíc i v takovém případe jsou přihlašovací údaje odesílané otevřeně v URL:
http://user:pass@192.168.1.1/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello 20World!
Z tohoto důvodu je zasílání zpráv pomocí metody HTTP GET standardně vypnuté a je třeba ho nejprve ručně povolit na záložce GSM Modem:
Odeslání SMS pomocí WWW prohlížeče
Do adresního řádku WWW prohlížeče zadáme URL adresu HWg-SMS-GW3 včetně požadovaných příkazů:
http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello World!
Po odeslání na nás vyskočí potvrzení o odeslání zprávy ve formátu XML:
<Root> <QueueAddResponse> <Rslt>1</Rslt> <ID>2</ID> </QueueAddResponse> </Root>
Odeslání SMS pomocí programu Wget
GNU Wget je řádková utilita, která slouží jako jednoduchý ale výkonný http klient. Implementuje přenos souborů přes protokoly HTTP, HTTPS a FTP. Získat ji lze na adrese https://www.gnu.org/software/wget/ verze pro Windows jsou pak k dispozici na adrese http://gnuwin32.sourceforge.net/packages/wget.htm
Použití utility wget je velmi jednoduché – stačí zadat stejný příkaz jako do adresního řádku prohlížeče, ale s ohledem na to, že wget neumí přenést více než jeden parametr v URL, je třeba celou URL uzavřít do uvozovek.
wget "http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello World!"
Výsledek pak v příkazovém řádku vypadá takto:
C:\Users\volmr\Desktop\wget>wget "http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello World!" --2017-12-28 15:56:35-- http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello%20World! Connecting to 192.168.100.169:80... connected. HTTP request sent, awaiting response... 200 Ok Length: unspecified [text/xml] Saving to: 'values.xml@Cmd=SMS&Nmr=777232759&Text=Hello%20World!.1' values.xml@Cmd=SMS&Nmr=777232 [ <=> ] 118 --.-KB/s in 0s 2017-12-28 15:56:35 (5.48 MB/s) - 'values.xml@Cmd=SMS&Nmr=777232759&Text=Hello%20World!.1' saved [118] C:\Users\volmr\Desktop\wget>
Odeslání SMS pomocí programu cURL
Použití aplikace cURL je identické použití utility wget. Na příkaz
curl "http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello World!"
Odpoví aplikace takto:
C:\Users\volmr\Desktop\curl>curl "http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello World!" <?xml version="1.0" encoding="utf-8"?> <Root> <QueueAddResponse> <Rslt>1</Rslt> <ID>4</ID> </QueueAddResponse> </Root> C:\Users\volmr\Desktop\curl>
Výsledkem je pochopitelně odeslaná zpráva
Odesílání SMS z programu PRTG
PRTG Network Monitor představuje úplné řešení pro monitorování sítí kombinující odborné znalosti společnosti Paessler s komplexní sadou monitorovacích funkcí, snadno ovladatelným a intuitivním rozhraním a nejmodernějším monitorovacím nástrojem, který je vhodný pro všechny typy sítí.
PRTG Network Monitor je schopen odesílat SMS prostřednictvím metody HTTP GET a pro jeho aktivaci stačí nastavit už jen URL kam se mají zprávy posílat. To se prování pomocí Enterprise Console (aplikace nebo WWW rozhraní) menu Setup > Systém Administration > Notification Delivery, kde do pole Custom URL vepíšete:
http://IP_adresa/values.xml?Cmd=SMS&Nmr=%SMSNUMBER&Text=%SMSTEXT
tím zařídíte, že systémové proměnné SMSNUMBER a SMSTEXT se budou vkládat na správná místa v URL.
A pokud by HWg-SMS-GW3 byla chráněna jménem a heslem, obgobně jako v předchozím případě použijete zápis:
http://user:pass@IP_adresa/values.xml?Cmd=SMS&Nmr=%SMSNUMBER&Text=%SMSTEXT
Odesílání SMS pomocí SNMP funkce Write (snmpset)
Od verze FW 1.1.3 podporuje HWg-SMS-GW3 odesílání SMS a prozvonění prostřednictvím SNMP. K tomu slouží SNMP write, či přesněji SNMP funkce SET. Je však třeba zapsat postupně všechny 3 požadovaná OID pro cílové číslo, text zprávy a funkci (SMS/prozvonění/sms+prozvonění). K tomu slouží následující OID:
- msgQueueNmr (OID .1.3.6.1.4.1.21796.4.10.2.2.0) - (povinné) Cílové telefonní číslo v národním nebo mezinárodním formátu. Lze zadat v mezinárodním formátu se znakem „+“ i „00“
- msgQueueCmd (OID .1.3.6.1.4.1.21796.4.10.2.3.0) - (povinné) příkaz definující co se má stát 1=sms,2=ring,3=sms+ring
- msgQueueText (OID .1.3.6.1.4.1.21796.4.10.2.1.0) - (povinné) text zprávy. Pokud chceme pouze prozvonění není třeba zadávat
V praxi pak mohou jednotlivé příkazy vypadat například takto:
snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.2.0 i: 777232759 snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.1.0 s "Hello World!" snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.3.0 i: 1
Po aplikaci v příkazovém řádku se jeví takto:
C:\usr\bin>snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.2.0 i: 777232759 SNMPv2-SMI::enterprises.21796.4.10.2.2.0 = INTEGER: 777232759 C:\usr\bin>snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.1.0 s "Hello World!" SNMPv2-SMI::enterprises.21796.4.10.2.1.0 = STRING: "Hello World!" C:\usr\bin>snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.3.0 i: 1 SNMPv2-SMI::enterprises.21796.4.10.2.3.0 = INTEGER: 1 C:\usr\bin>
Příkaz na prozvonění pak vypadá takto:
snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.2.0 i: 777232759 snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.3.0 i: 2
a odpověď na něj takto:
C:\usr\bin>snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.2.0 i: 777232759 SNMPv2-SMI::enterprises.21796.4.10.2.2.0 = INTEGER: 777232759 C:\usr\bin>snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.3.0 i: 2 SNMPv2-SMI::enterprises.21796.4.10.2.3.0 = INTEGER: 2 C:\usr\bin>
HWg-SMS-GW3 je brána pro odesílání poplachových SMS po síti LAN. HWg-SMS-GW3 je primárně určena pro použití s produkty a software HW group s.r.o., ale její komunikační rozhraní jsou dostatečně zdokumentována, aby se dala použít i se systémy 3 stran.