เมื่อ Windows Azure ไม่ให้ ping ก็ใช้ tcping แทนซิ

การ ping เป็นการใช้ ICMP ในการเรียกเข้าไปยัง Server ปลายทาง ปรกติเอาไว้ทดสอบเรื่องการตอบสนองของ Server ปลายทางว่ายังมีการตอบสนองอยู่หรือไม่ และมีความเร็วในการตอบสนองดีอยู่หรือเปล่า (พื้นฐานทั่วไปใช้ประมาณนี้)

แต่ทีนี้ Windows Azure ดันไม่ยอมให้ ICMP เข้าไปที่ Virtual Machines ด้านหลัง Firewall วิธีที่น่าจะโอเคที่สุดคือตรวจสอบด้วยการ GET ข้อมูลผ่าน TCP แทนว่า service ตัวนั้นยังเปิดใช้งานอยู่หรือไม่ ซึ่งแน่นอนว่าต้องมี service บน port ตรงนั้นก่อน แล้วเปิด Endpoint ที่ port นั้นด้วย

โดยแน่นอนว่าเครื่องมือที่ใช้ในการตรวจสอบว่า port นั้นเปิดอยู่หรือไม่นั้นก็มีเยอะนะ แต่ว่าไม่มีตัวไหนเล็กเท่ากับเจ้า tcping.exe – ping over a tcp connection (http://www.elifulkerson.com/projects/tcping.php) โดยเป็น console application ขนาดเล็ก ที่ทำงานบน Win32 Console ซึ่งทำงานได้บน Windows XP, Vista, 7 และที่ผมใช้อยู่อย่าง Windows 8 ซึ่งเจ้าตัวนี้เป็น license แบบ GPL ที่ตัวหน้าเว็บหลักมี source code ให้สำหรับเผื่อเอาไปพัฒนาต่อได้เองด้วย

ตัว tcping.exe เป็น console application เล็กๆ ที่ทำงานคล้ายๆ กับ ping แต่ทำงานบน tcp protocal ทำให้มันมีความสามารถที่มากกว่า ping ที่ใช้ๆ กันเพียงแค่ request/response ตามปรกติ

ตัว tcping.exe เองนั้น default port ที่ใช้คือ port 80 (http service)

C:\Users\Annop>tcping thaicyberpoint.com

Probing 168.63.238.30:80/tcp - Port is open - time=56.492ms
Probing 168.63.238.30:80/tcp - Port is open - time=55.441ms
Probing 168.63.238.30:80/tcp - Port is open - time=44.554ms
Probing 168.63.238.30:80/tcp - Port is open - time=62.413ms

Ping statistics for 168.63.238.30:80
4 probes sent.
4 successful, 0 failed.
Approximate trip times in milli-seconds:
Minimum = 44.554ms, Maximum = 62.413ms, Average = 54.725ms

แต่ถ้าต้องการที่จะตรวจสอบ port อื่นๆ ก็สามารถกำหนดได้ด้วยการใส่หมายเลข port อื่นๆ ต่อท้ายเอา

C:\Users\Annop>tcping thaicyberpoint.com 22

Probing 168.63.238.30:22/tcp - Port is open - time=79.934ms
Probing 168.63.238.30:22/tcp - Port is open - time=60.144ms
Probing 168.63.238.30:22/tcp - Port is open - time=67.704ms
Probing 168.63.238.30:22/tcp - Port is open - time=61.353ms

Ping statistics for 168.63.238.30:22
4 probes sent.
4 successful, 0 failed.
Approximate trip times in milli-seconds:
Minimum = 60.144ms, Maximum = 79.934ms, Average = 67.284ms

และถ้าต้องการทดสอบความเร็วอื่นๆ นอกจาก response time ปรกติ ก็ใส่ -h เข้าไป ก็ได้ข้อมูลเพิ่มเติมมาอีกพอสมควร

C:\Users\Annop>tcping -h thaicyberpoint.com
** Requesting "" from thaicyberpoint.com:
(for various reasons, kbit/s is an approximation)

Probing 168.63.238.30:80/tcp - HTTP is open - time=39.916ms rcv_time=98.247 status=302 bytes=363 kbit/s=~29.558
Probing 168.63.238.30:80/tcp - HTTP is open - time=34.371ms rcv_time=60.109 status=302 bytes=363 kbit/s=~48.312
Probing 168.63.238.30:80/tcp - HTTP is open - time=35.718ms rcv_time=100.248 status=302 bytes=363 kbit/s=~28.968
Probing 168.63.238.30:80/tcp - HTTP is open - time=36.757ms rcv_time=77.558 status=302 bytes=363 kbit/s=~37.443

Ping statistics for 168.63.238.30:80
4 probes sent.
4 successful, 0 failed.
Approximate trip times in milli-seconds:
Minimum = 34.371ms, Maximum = 39.916ms, Average = 36.691ms
Approximate download times in milli-seconds:
Minimum = 60.109ms, Maximum = 100.248ms, Average = 84.041ms

สุดท้ายก็หวังว่าหลายๆ คนที่ใช้พวก cloud service จะได้ทำความเข้าใจข้อจำกัดบางอย่างและหาวิธีแก้ไขกันเพื่อให้เราสามารถทำงานได้ต่อไปครับ

การใช้งาน (นำมาจากเว็บ project)

Usage: tcping [-t] [-d] [-i interval] [-n times] server-address [server-port]

-t   : ping continuously until stopped via control-c
-n 5 : for instance, send 5 pings
-i 5 : for instance, ping every 5 seconds
-w 100 : for instance, wait 100 milliseconds for a response
-d   : include date and time on each line
-b 1 : enable beeps (1 for on-down, 2 for on-up,
3 for on-change, 4 for always)
-r 5 : for instance, relookup the hostname every 5 pings
-s   : automatically exit on a successful ping
-v   : print version and exit
-d   : include date and time on each line

HTTP Options:
-h   : HTTP mode (use url without http:// for server-address)
-u   : include target URL on each line
-p   : use POST rather than GET (to avoid caching)

Debug Options:
-o   : use alternate timing function (less precise)
-f   : force tcping to send at least one byte

If you don't pass server-port, it defaults to 80.