User:Joseph.voip.ms/Sandbox - VoIP.ms Wiki

Check out our YouTube channel to watch our simple tutorials that will help you set up most of our features.

User:Joseph.voip.ms/Sandbox

From VoIP.ms Wiki

(Difference between revisions)
Jump to: navigation, search
(Undo revision 9386 by Joseph.voip.ms (talk))
Line 1: Line 1:
-
{| align="center" style="font-size: 25px;width: 400px; text-align: center"
+
== Choosing a Server ==
-
|
+
 
-
[[SMS | English]]
+
[http://www.voip.ms VoIP.ms] offers many different servers, but which one should you choose? One misconception is that you should pick the closest to your location, however this is not needed most of the time. For example, if you are in the USA, any of the US servers will provide a really good latency and service quality. The newest server within a city is indicated with the highest number attached to the name, as they are classified in ascending order. Also worth noting is that there is a network tool that will help you when deciding which server you want to use, generally named a "ping", which will provide you the latency between you and the server. Therefore the server which provides you less latency should be used.
-
|
+
 
-
|
+
=== IPs ===
-
[[Message_texte | Français]]
+
 
 +
In the following links you will find a table with the server's information including their IP addresses.
 +
 
 +
{| class="wikitable" style="font-size: 200%; border: none; width: 60%; height: 80px; text-align: center;"
 +
| [[Servers#Canada | Canada]] || [[Servers#USA  | USA]] || [[Servers#International | International]]
|}
|}
-
Short Message Service (SMS). This feature will allow you to send and receive messages with your DID Number (US and Canada DID Numbers Only). Currently it is in beta and will remain free until further notice.  
+
[[File:ChooseServerImg.png|thumb|none|1280px|VoIP.ms servers]]
 +
 
 +
===Server Realms===
 +
 
 +
Please click here [http://wiki.voip.ms/article/Server_Realms Server Realms] to get the Realm Name for the server you plan on using, this can differ from the Domain Name being used.
 +
 
 +
Please note that the following servers will not be available to select as a DID Point of Presence for newer accounts:
 +
Atlanta 1, Chicago 1, New York 1, New York 4, Seattle 1, Montreal 1, Montreal 2, Montreal 3, Montreal 4, Toronto, Toronto 2, Toronto 3, Toronto 4.
 +
 
 +
= What is a Ping? =
 +
 
 +
Ping is a standard tool used to test network connections. It is mostly used to determine if a server or device can be reached across the network and the latency of the response(the time it takes to send a packet to the destination and for it to return to your computer).
 +
 
 +
Ping tools are part of Windows, Mac OS X and Linux as well as some routers.
-
Please note that this feature is for regular customer usage. '''No automation, telemarketing, bulk sending or receiving will be allowed.'''
+
== How does the ping work? ==
 +
It sends request messages to a target network address or DNS names at periodic intervals and measures the time it takes for a response message to arrive and return(better known as latency).
-
__TOC__
+
==How to ping on a PC==
-
== Important information to know about the SMS Service ==
+
Pinging is a command which tells you if the connection between your computer and a particular domain is working correctly.
-
* The SMS Service is in '''BETA''' version, that means it is not fully deployed. It is important to us that you report any issues with this service by sending an email to [mailto:[email protected] support] so that the developers can get involved if necessary.
+
In Windows, select Start > Programs > Accessories > Command Prompt. This will give you a window like the one below.
-
* The SMS Service will be free until further notice.
+
Enter the word ping, followed by a space, then the domain name.(montreal.voip.ms) in this case domain is our server name.
-
* The SMS Service is only available for US and Canadian local DID Numbers marked with the distinctive SMS Icon.
+
If the results show a series of replies, the connection is working. The time shows you how fast the connection is. If you see a "timed out" error instead of a reply, there is a breakdown somewhere between your computer and the domain.
-
* The SMS Service can only be used to send SMS Messages to Canadian and US 10 digit numbers at this time. We also cannot guarantee that International SMS will be properly received.
+
[[File:Ping.gif|thumb|none|600px|Ping]]
-
* VoIP.ms reserves the right, at its sole discretion, to limit or disable the SMS service from any account that may present marketing patterns / automation patterns / bulk sending or receiving while the service is free and in beta.
+
==How to ping on a Mac Computer==
-
* At this time we cannot guarantee that Short Code SMS Messages, which are usually 6 digits or less (e.g.: Skype, Bank Codes, TV Commercials etc...) will work.
+
1- Click on Finder in the dock.
-
* We cannot guarantee that accents or special characters including non Latin letters will be properly delivered.
+
2- Click on Applications.
-
* For '''Ported In Numbers''' compatible with the feature: The SMS Functionality will be available up to 48 hours after the porting process is marked as Completed.
+
3- Click on Utilities.
-
* '''IMPORTANT''': At this time, it is not possible to use a softphone to send or receive messages with our SMS Feature. This has to be done through the SMS Message Center in the Customer Portal at DID Numbers >> [https://www.voip.ms/m/sms.php SMS Message Center] in the Customer Portal or through the SMS portal at [https://sms.voip.ms sms.voip.ms]
+
4- Double-click on Network Utility. *
-
If you have further questions don't hesitate to contact the Support Staff on the Live Chat or Ticket System.
+
* In OS X Mavericks (10.9.x) this utility app changed location. Launch it from spotlight instead, either press "command"+"space bar" or click on spotlight directly (magnifying glass icon at top right of screen), type "network utility" and hit "return"
-
== Identifying a SMS DID Number ==
+
5- In the Network Utility window, click on the Ping tab
-
The first thing you need to know is that this feature is only available for '''local US and Canadian numbers''' at the moment. You will note that some numbers have a little icon of a cellphone device, this indicates that the number supports SMS. Please note that not all locations support SMS at this time.
+
6- In the field under "Please enter the network address to ping," like montreal.voip.ms
-
You can start ordering a DID Number from your portal >> DID Numbers >> [https://www.voip.ms/m/dids.php Order DID] >> Local Numbers >> (US or Canada) Numbers and you will be able to purchase your desired number, just make sure it supports the SMS feature.
 
-
[[File:SMS 1.png|thumb|none|600px]]
+
''If pings results are not consistent, you may have an issue with Jitter. You can work on this issue by adjusting the "Network Jitter Level" setting on your VoIP device. Usually a ping of under 150 ms is recommended in order to have good quality. The latency time to the server is important, however there are also other factors that could affect the quality of the calls such as packet loss (VoIP communications are very sensitive to this), and the Jitter level of your Internet connection.''
-
== Configuring the SMS service ==
+
The following is the output of running ping with the target losangeles.voip.ms.
 +
#ping losangeles.voip.ms
 +
Ping to losangeles.voip.ms [67.215.241.250] with 32 bytes de datos:
 +
Response from 67.215.241.250: bytes=32 time=67ms TTL=52
 +
Response from 67.215.241.250: bytes=32 time=69ms TTL=52
 +
Response from 67.215.241.250: bytes=32 time=68ms TTL=52
 +
Response from 67.215.241.250: bytes=32 time=67ms TTL=52
 +
ping statistics from 67.215.241.250:
 +
4 packets transmitted, 4 received, 0% packet lost. rtt min/avg/max/mdev = 67ms, 69ms, 67ms
-
Once purchased the SMS Service needs to be activated on the DID settings, from your portal >> DID Numbers >> Manage DID >> Edit Selection >> SMS.  
+
Sample ping output in windows:
 +
C:\Windows\system32>ping montreal.voip.ms
 +
 +
Pinging montreal.voip.ms [67.205.74.184] with 32 bytes of data:
 +
Reply from 67.205.74.184: bytes=32 time=85ms TTL=49
 +
Reply from 67.205.74.184: bytes=32 time=86ms TTL=49
 +
Reply from 67.205.74.184: bytes=32 time=86ms TTL=49
 +
Reply from 67.205.74.184: bytes=32 time=85ms TTL=49
 +
 +
Ping statistics for 67.205.74.184:
 +
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
 +
Approximate round trip times in milli-seconds:
 +
    Minimum = 85ms, Maximum = 86ms, Average = 85ms
-
On that section you can activate and configure some forward options for the SMS service.
 
-
[[File:SMS_options.png|thumb|none|600px]]
+
= Latency Testing Scripts (User Submitted) =
 +
<p>All the following scripts were produced by voip.ms users who felt others might also benefit from the output of their efforts.  They were written over a span of Years and probably need adjusting before you use them, to cater for changes in servers over time and changes in policies (like not testing heavily subscribed servers which are not open to new registrations)</p>
 +
<p>If you aren't satisfied that the scripts are safe or simply don’t like the way they syntactically appear, you can still manually ping a selection of servers and choose a server based on the best latency. The following scripts are essentially just wrappers around the ping command which support lists of servers to feed to ping and present the output in a readable format.</p>
 +
<p>If you feel you have a simpler cleaner script that works for another platform or language, please do add it to this wiki via a support ticket.
 +
</p>
 +
=== Bash Script To Handle The Mac Ping Output Format ===
 +
<p>To make use of this script (1) save as a plain text file (2) set permissions on the file to executable (3) invoke script
 +
e.g. Save script below using your favourite editor as pingVoipMS.sh (2) chmod u+x pingVoipMS.sh (3) ./pingVoipMS.sh
 +
This is a bash 3.x script, so it also works in Linux, just change the ping packet loss field from 7 to 6 in the final loop below (or wherever the loss field is in your ping output format).  Depending upon your distro curl might need to change to wget.
 +
</p>
 +
<pre>
 +
#!/bin/bash
 +
# Ping several servers and display Latency, Jitter and Packet Loss
 +
#      Usage: [-c <count>][-i <wait time>][-r test restricted servers][<server list file>]
 +
#
 +
# The optional text file should be formatted with one host name per line.
 +
# The list of voip.ms servers is available at http://wiki.voip.ms/article/Choosing_Server
 +
# If no args are supplied, this script will scrape a ping server list from voip.ms
 +
#
 +
USER_FILE=""
 +
COUNT=3; INTERVAL=5; RESTRICTED=0
 +
restrictedList=(atlanta.voip.ms chicago.voip.ms
 +
                montreal.voip.ms montreal2.voip.ms montreal3.voip.ms montreal4.voip.ms
 +
                newyork.voip.ms newyork4.voip.ms seattle.voip.ms
 +
                toronto.voip.ms toronto2.voip.ms toronto3.voip.ms toronto4.voip.ms)
-
The first action to take is to mark the '''Short Message Service (SMS) service''', by enabling this field the SMS Service will be active and free until further notice.
+
# Handle any passed in script arguments
 +
while getopts c:i:r parm
 +
do
 +
    case $parm in
 +
        c)count_opt=$OPTARG;;
 +
        i)interval_opt=$OPTARG;;
 +
        r)RESTRICTED=1;;
 +
        *)echo -e "Invalid arg\nUsage:\t[ -c <count of ECHO_REQUESTs to Tx, default 3> ] \
 +
                  \n\t[ -i <wait time (s) between datagrams, default 5> ]                \
 +
                  \n\t[ -r ] Include restricted servers in latency test                  \
 +
                  \n\t[FILE <ping server list> ]";exit 1;;
 +
    esac
 +
done
-
* '''VoIP.ms SMS Portal''': This is enabled by default and it can't be modified, that means that you will be able to create and send messages from the SMS Message Center.
+
# Test if an option was specified and whether it's a +ve non-zero integer
 +
[[ -n $count_opt    && ($count_opt =~ ^[[:digit:]]+$)    && $count_opt -gt 0 ]]    && COUNT=$count_opt
 +
[[ -n $interval_opt && ($interval_opt =~ ^[[:digit:]]+$) && $interval_opt -gt 0 ]] && INTERVAL=$interval_opt
-
*'''SMS Email Address''': By activating this option all the SMS Messages will be sent to the email address you configure in this field. The advantage of this option is that you will receive your SMS Messages directly to your email and you will be able to Reply to these messages from your email too. You just need to click on '''reply''' to the email. Please note that e-mail responses are as well limited to 160 characters and if they exceed this limit, they'll be split in two (or more messages if applies) when sent.
+
shift $(($OPTIND -1))
-
  To reply the SMS Message via your email it is important to click on Reply and '''DON'T change or modify'''
+
# Validate supplied file (server list)
-
  the destination mail "TO"
+
[[ -n $1 && !(-f $1 && -r $1) ]] && { echo "\"$1\" file does not exist or is not readable"; exit 1; }
-
  ([email protected])and the subject E.G [#USXXX] Message sent to 5555555555.
+
[[ -n $1 && -f $1 && -r $1 ]] && USER_FILE="$1"
-
*'''SMS Forward''': You can have your SMS Messages forwarded to your cellphone or any other number that supports SMS, with this option you will receive the SMS Messages from our system to the configured phone number.  
+
if [[ -n $USER_FILE ]]
 +
then
 +
# Bash 3.x in macOS does not support readarray, need to do cumbersome array loops instead
 +
    while IFS= read -r line; do
 +
        serverList+=( "$line" )
 +
    done < <(grep -e '[[:alpha:]]*[[:alnum:]]\.voip\.ms' $USER_FILE | grep  -v '^\s*#' | awk NF)
 +
else
 +
# N.B. The script looks for the html boldface tags <b> </b> inside a bracket
 +
# If the website alters and the parse fails, manually create the list and
 +
# supply as a script arg (or perhaps update the parsing to work again :)
 +
    while IFS= read -r line; do
 +
        serverList+=( "$line" )
 +
    done < <(curl --silent http://wiki.voip.ms/article/Choosing_Server | \
 +
            grep '(<b>[[:alpha:]]*[[:alnum:]]\.voip\.ms</b>)'        | \
 +
            tr "<>" " " | awk '{print $(NF-3)}'                        )
 +
fi
-
  The CallerID sent to the Call Forwarded Cell Phone will be your DID Number that received the SMS Message.
+
# Newer voip.ms clients can't register onto these over-subscribed servers
 +
# Don't test the restricted list unless explicitly asked (with the -r cmd line option)
 +
if [[ $RESTRICTED -eq 0 ]]
 +
then
 +
    for server in ${restrictedList[@]}
 +
    do
 +
        ix=$(printf "%s\n" "${serverList[@]}" | grep -n "^${server}" | cut -d ":" -f1)
-
*'''SMS URL Callback''': By enabling this option you will be able to send the messages to another destination e.g. your own server. If selected SMS Messages received by your DID will Send a GET request to the URL Callback provided. Available variables for your URL:
+
        while IFS= read -r idx; do
 +
            keys+=($idx)
 +
        done < <([[ $ix -gt 0 ]] && echo $((ix-1)))
 +
    done
 +
    for ((i=${#keys[@]} - 1; i >= 0; i--)); do unset serverList[keys[i]]; done
 +
fi
-
  '''{ID}''' The ID of the SMS message.
+
if [[ ${#serverList[@]} -eq 0 ]]
-
  '''{TIMESTAMP}''' The date and time the message was received.
+
then
-
  '''{FROM}''' The phone number that sent you the message
+
    echo "No unrestricted Voip.ms servers could be found, please supply a server list"
-
  '''{TO}''' The DID Number that received the message
+
    exit 1
-
  '''{MESSAGE}''' The content of the message
+
fi
-
  '''Example''': http: //mysite.com/sms.php?to={TO}&from={FROM}&message={MESSAGE}&id={ID}&date={TIMESTAMP}
+
-
*'''URL Callback Retry''': When selected, we will be expecting an "ok" output (without quotes) from your URL callback page as an indicator that you have received the message correctly. If we don't received the "ok" (without quotes) from your callback page, we will keep sending you the same message every 30 minutes.
+
runTime=$(( $COUNT * $INTERVAL * ${#serverList[@]} ))
-
Once you configure the desired option, click on Apply Changes.
+
echo "PING will send $COUNT packet(s) with a wait of $INTERVAL sec(s) between each packet"
 +
echo "Change the PING options by invoking this script with -c and/or -i, default \"-c 3 -i 5\""
 +
echo "Over $((${#serverList[@]})) server(s) the estimated script Run Time will be $runTime seconds"
 +
echo "================================================================"
 +
printf "%-20s %-18s %7s %8s %6s  %s\n" "VoIP Server" "IP Address" "Latency" "Jitter" "Loss" "Countdown"
 +
echo "================================================================  (seconds)"
-
== Send and Receive Messages ==
+
for myLn in ${serverList[@]}
 +
do
 +
    while IFS=$'\n' read -r line; do
 +
        pingList+=( "$line" )
 +
        printf "%-64s %5d  %2d/%-2d\n" "$line" "$((runTime - $COUNT * $INTERVAL * ${#pingList[@]}))" "${#pingList[@]}" "${#serverList[@]}"
 +
    done < <( ping -c $COUNT -i $INTERVAL -q $myLn | awk '\
 +
        /^PING / {myH=$2}
 +
        /^PING / {
 +
            IP = substr($3,2,15)
 +
            split(IP,myIP,")") }
 +
        /packet loss/ {myPL=$7}
 +
        /min\/avg\/max/ {
 +
            split($4,myS,"/")
 +
            printf("%-20s %-18s %7.3f %8.3f %6s\n",
 +
                    myH, myIP[1], myS[2], myS[4], myPL ) }
 +
    ' )
 +
done
-
===SMS Message Center===
+
echo "================================================================"
 +
echo -e "\nMost appropriate server listed in order of best latency\n"
 +
echo "================================================================"
 +
printf "%-20s %-18s %7s %8s %6s\n" "VoIP Server" "IP Address" "Latency" "Jitter" "Loss"
 +
echo "================================================================"
 +
printf "%s\n" "${pingList[@]}" | LC_ALL=C sort -n -k 3,3 -k 5,5 -k 4,4 | awk '{printf("%s    \(%2d\)\n",$0, NR)}'
 +
echo "================================================================"
 +
</pre>
-
To start using the service you will need to use the SMS Message Center, from your portal >> DID Numbers >> [https://www.voip.ms/m/sms.php SMS Message Center].  
+
=== Perl Script ===
 +
Pings list of voip.ms servers round robin with optional output csv file.
-
For Mobile Devices please use [https://sms.voip.ms/ sms.voip.ms] as a complete all in one solution.  
+
    # usage ping_voip.ms.pl <number of times> <seconds in between> <output.csv>
 +
    use Net::Ping;
 +
    use Time::HiRes;
 +
    use strict;
 +
   
 +
    # input list
 +
    my @hosts = qw(
 +
        atlanta.voip.ms
 +
        atlanta2.voip.ms
 +
        chicago.voip.ms
 +
        chicago2.voip.ms
 +
        chicago3.voip.ms
 +
        chicago4.voip.ms
 +
        dallas.voip.ms
 +
        denver.voip.ms
 +
        denver2.voip.ms
 +
        houston.voip.ms
 +
        losangeles.voip.ms
 +
        losangeles2.voip.ms
 +
        newyork.voip.ms
 +
        newyork2.voip.ms
 +
        newyork3.voip.ms
 +
        newyork4.voip.ms
 +
        seattle.voip.ms
 +
        seattle2.voip.ms
 +
        seattle3.voip.ms
 +
        tampa.voip.ms
 +
        washington.voip.ms
 +
        washington2.voip.ms
 +
        montreal.voip.ms
 +
        montreal2.voip.ms
 +
        montreal3.voip.ms
 +
        montreal4.voip.ms
 +
        toronto2.voip.ms
 +
        toronto3.voip.ms
 +
        toronto4.voip.ms
 +
        toronto.voip.ms
 +
        london.voip.ms
 +
    );
 +
   
 +
    $| = 1; #autoflush
 +
    # High precision syntax (requires Time::HiRes)
 +
    my $p = Net::Ping->new("icmp",1);
 +
    $p->hires();
 +
    my $max_name_length = (reverse sort { $a <=> $b } map { length($_) } @hosts)[0];
 +
    my $count = 4; # number of times to ping
 +
    my $interval = 5; # seconds between ping rounds
 +
    my $output_file = "";
 +
    my @data;
 +
   
 +
    # check for arguments
 +
    my $num_args = @ARGV;
 +
    if ($num_args >= 1) {$count = $ARGV[0];}
 +
    if ($num_args >= 2) {$interval = $ARGV[1];}
 +
    if ($num_args >= 3) {$output_file = $ARGV[2];}
 +
   
 +
    # check argument validity
 +
    $0 =~ /^.*\\(.*)$/;
 +
    my $script = $1;
 +
    if ($count !~ /^\d+$/ or $interval !~ /^\d+$/) {die "Usage: $script <number of rounds> <seconds between rounds> <output.csv>\n";}
 +
    if (length($output_file) > 0 and $output_file !~ /\.csv$/) {$output_file .= ".csv";}
 +
   
 +
    # main loop
 +
    for my $i (1..$count)
 +
    {
 +
        sleep $interval unless $i == 1;
 +
        print "Round $i\n";
 +
        my $host_num=0;
 +
        foreach my $host (@hosts)
 +
        {
 +
            (my $ret, my $duration, my $ip) = $p->ping($host);
 +
            $ip =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/;
 +
            if ($ret)
 +
            {
 +
                printf("%*s [ip: %3s.%3s.%3s.%3s] is alive (%6.2f ms)\n", $max_name_length, $host, $1, $2, $3, $4, $duration*1000);
 +
                $data[$host_num][$i]=$duration*1000;
 +
            }
 +
            else
 +
            {
 +
                printf("%*s [ip: %3s.%3s.%3s.%3s] is dead\n", $max_name_length, $host, $1, $2, $3, $4);
 +
            }
 +
            $host_num++;
 +
        }
 +
        print "\n";
 +
    }
 +
    $p->close();
 +
   
 +
    # if output file name given
 +
    if (length($output_file)>0)
 +
    {
 +
        # print output to file
 +
        open FILE, ">$output_file" or die "$!\n";
 +
       
 +
        # print column headers
 +
        print FILE "Server\\Round";
 +
        for my $i (1..$count)
 +
        {
 +
            print FILE ", $i";
 +
        }
 +
        print FILE ", Average\n";
 +
       
 +
        # print data
 +
        my $i = 0;
 +
        foreach my $host (@hosts)
 +
        {
 +
            print FILE "$host";
 +
            my $sum = 0;
 +
            for my $j (1..$count)
 +
            {
 +
                $sum += $data[$i][$j];
 +
                printf FILE ", %8.4f",$data[$i][$j];
 +
            }
 +
            printf FILE ", %8.4f\n",$sum/$count;
 +
            $i++;
 +
        }
 +
       
 +
        close FILE;
 +
        print "Data written to $output_file\n";
 +
    }
 +
   
 +
    # print summary to screen
 +
    my $i = 0;
 +
    printf("%-*s Average (ms)\n", $max_name_length, "Server");
 +
    foreach my $host (@hosts)
 +
    {
 +
        my $sum = 0;
 +
        for my $j (1..$count)
 +
        {
 +
            $sum += $data[$i][$j];
 +
        }
 +
        printf("%-*s %8.4f\n", $max_name_length+1, $host, $sum/$count);
 +
        $i++;
 +
    }
-
From the SMS Message Center you can check your SMS History, send and receive SMS messages.
 
-
[[File:SMS.png|thumb|none|600px]]
+
Output:
 +
    Round 1
 +
        atlanta.voip.ms [ip: 174. 34.146.162] is alive ( 88.97 ms)
 +
      atlanta2.voip.ms [ip: 72. 9.246.170] is alive ( 92.99 ms)
 +
        chicago.voip.ms [ip: 208.100. 39. 52] is alive ( 49.70 ms)
 +
      chicago2.voip.ms [ip: 208.100. 39. 53] is alive ( 59.76 ms)
 +
      chicago3.voip.ms [ip: 208.100. 39. 54] is alive ( 59.53 ms)
 +
      chicago4.voip.ms [ip: 208.100. 39. 55] is alive ( 49.73 ms)
 +
        dallas.voip.ms [ip:  74. 54. 54.178] is alive ( 94.99 ms)
 +
        denver.voip.ms [ip: 173.248.161. 90] is alive ( 94.05 ms)
 +
        denver2.voip.ms [ip: 173.248.159.210] is alive ( 85.13 ms)
 +
        houston.voip.ms [ip: 209. 62.  1.  2] is alive (102.87 ms)
 +
    losangeles.voip.ms [ip:  96. 44.149.186] is alive ( 64.92 ms)
 +
    losangeles2.voip.ms [ip:  96. 44.149.202] is alive ( 63.41 ms)
 +
        newyork.voip.ms [ip:  74. 63. 41.218] is alive (131.75 ms)
 +
      newyork2.voip.ms [ip: 107.  6. 67.236] is alive (120.64 ms)
 +
      newyork3.voip.ms [ip: 107.  6. 67.237] is alive (120.49 ms)
 +
      newyork4.voip.ms [ip: 107.  6. 67.238] is alive (111.43 ms)
 +
        seattle.voip.ms [ip:  50. 23.160. 50] is alive ( 94.25 ms)
 +
      seattle2.voip.ms [ip:  50. 23.160. 51] is alive ( 95.86 ms)
 +
      seattle3.voip.ms [ip:  50. 23.160. 52] is alive ( 90.85 ms)
 +
          tampa.voip.ms [ip:  68.233.226. 97] is alive (123.29 ms)
 +
    washington.voip.ms [ip: 208. 43.234.226] is alive ( 98.71 ms)
 +
    washington2.voip.ms [ip: 208. 43.234.227] is alive (101.19 ms)
 +
      montreal.voip.ms [ip:  67.205. 74.184] is alive ( 81.82 ms)
 +
      montreal2.voip.ms [ip:  67.205. 74.187] is alive ( 86.13 ms)
 +
      montreal3.voip.ms [ip:  72. 55.168. 18] is alive ( 77.09 ms)
 +
      montreal4.voip.ms [ip:  67.205. 74.179] is alive ( 96.18 ms)
 +
      toronto2.voip.ms [ip: 184. 75.215.114] is alive (103.70 ms)
 +
      toronto3.voip.ms [ip: 184. 75.215.146] is alive (131.27 ms)
 +
      toronto4.voip.ms [ip: 184. 75.213.210] is alive (125.13 ms)
 +
        toronto.voip.ms [ip: 184. 75.215.106] is alive (103.26 ms)
 +
        london.voip.ms [ip:  5. 77. 36.136] is alive (152.77 ms)
 +
   
 +
    Round 2
 +
        atlanta.voip.ms [ip: 174. 34.146.162] is alive ( 88.14 ms)
 +
      atlanta2.voip.ms [ip:  72.  9.246.170] is alive ( 92.86 ms)
 +
        chicago.voip.ms [ip: 208.100. 39. 52] is alive ( 50.03 ms)
 +
      chicago2.voip.ms [ip: 208.100. 39. 53] is alive ( 59.44 ms)
 +
      chicago3.voip.ms [ip: 208.100. 39. 54] is alive ( 59.33 ms)
 +
      chicago4.voip.ms [ip: 208.100. 39. 55] is alive ( 50.22 ms)
 +
        dallas.voip.ms [ip:  74. 54. 54.178] is alive ( 95.58 ms)
 +
        denver.voip.ms [ip: 173.248.161. 90] is alive ( 95.94 ms)
 +
        denver2.voip.ms [ip: 173.248.159.210] is alive ( 85.29 ms)
 +
        houston.voip.ms [ip: 209. 62.  1.  2] is alive (102.73 ms)
 +
    losangeles.voip.ms [ip:  96. 44.149.186] is alive ( 65.59 ms)
 +
    losangeles2.voip.ms [ip:  96. 44.149.202] is alive ( 64.27 ms)
 +
        newyork.voip.ms [ip:  74. 63. 41.218] is alive (112.74 ms)
 +
      newyork2.voip.ms [ip: 107.  6. 67.236] is alive (121.22 ms)
 +
      newyork3.voip.ms [ip: 107.  6. 67.237] is alive (121.34 ms)
 +
      newyork4.voip.ms [ip: 107.  6. 67.238] is alive (110.75 ms)
 +
        seattle.voip.ms [ip:  50. 23.160. 50] is alive ( 94.06 ms)
 +
      seattle2.voip.ms [ip:  50. 23.160. 51] is alive ( 95.33 ms)
 +
      seattle3.voip.ms [ip:  50. 23.160. 52] is alive ( 91.58 ms)
 +
          tampa.voip.ms [ip:  68.233.226. 97] is alive (122.94 ms)
 +
    washington.voip.ms [ip: 208. 43.234.226] is alive ( 98.28 ms)
 +
    washington2.voip.ms [ip: 208. 43.234.227] is alive (101.40 ms)
 +
      montreal.voip.ms [ip:  67.205. 74.184] is alive ( 81.91 ms)
 +
      montreal2.voip.ms [ip:  67.205. 74.187] is alive ( 85.64 ms)
 +
      montreal3.voip.ms [ip:  72. 55.168. 18] is alive ( 75.15 ms)
 +
      montreal4.voip.ms [ip:  67.205. 74.179] is alive ( 96.79 ms)
 +
      toronto2.voip.ms [ip: 184. 75.215.114] is alive (103.10 ms)
 +
      toronto3.voip.ms [ip: 184. 75.215.146] is alive (150.85 ms)
 +
      toronto4.voip.ms [ip: 184. 75.213.210] is alive (138.40 ms)
 +
        toronto.voip.ms [ip: 184. 75.215.106] is alive (103.45 ms)
 +
        london.voip.ms [ip:  5. 77. 36.136] is alive (170.79 ms)
 +
   
 +
    Round 3
 +
        atlanta.voip.ms [ip: 174. 34.146.162] is alive ( 88.76 ms)
 +
      atlanta2.voip.ms [ip:  72.  9.246.170] is alive ( 92.86 ms)
 +
        chicago.voip.ms [ip: 208.100. 39. 52] is alive ( 49.65 ms)
 +
      chicago2.voip.ms [ip: 208.100. 39. 53] is alive ( 60.01 ms)
 +
      chicago3.voip.ms [ip: 208.100. 39. 54] is alive ( 59.05 ms)
 +
      chicago4.voip.ms [ip: 208.100. 39. 55] is alive ( 49.53 ms)
 +
        dallas.voip.ms [ip:  74. 54. 54.178] is alive ( 95.82 ms)
 +
        denver.voip.ms [ip: 173.248.161. 90] is alive ( 95.02 ms)
 +
        denver2.voip.ms [ip: 173.248.159.210] is alive ( 85.60 ms)
 +
        houston.voip.ms [ip: 209. 62.  1.  2] is alive (103.35 ms)
 +
    losangeles.voip.ms [ip:  96. 44.149.186] is alive ( 65.79 ms)
 +
    losangeles2.voip.ms [ip:  96. 44.149.202] is alive ( 64.05 ms)
 +
        newyork.voip.ms [ip:  74. 63. 41.218] is alive (113.01 ms)
 +
      newyork2.voip.ms [ip: 107.  6. 67.236] is alive (121.41 ms)
 +
      newyork3.voip.ms [ip: 107.  6. 67.237] is alive (122.23 ms)
 +
      newyork4.voip.ms [ip: 107.  6. 67.238] is alive (110.62 ms)
 +
        seattle.voip.ms [ip:  50. 23.160. 50] is alive ( 93.65 ms)
 +
      seattle2.voip.ms [ip:  50. 23.160. 51] is alive ( 95.19 ms)
 +
      seattle3.voip.ms [ip:  50. 23.160. 52] is alive ( 90.75 ms)
 +
          tampa.voip.ms [ip:  68.233.226. 97] is alive (125.12 ms)
 +
    washington.voip.ms [ip: 208. 43.234.226] is alive ( 98.19 ms)
 +
    washington2.voip.ms [ip: 208. 43.234.227] is alive (101.98 ms)
 +
      montreal.voip.ms [ip:  67.205. 74.184] is alive ( 80.16 ms)
 +
      montreal2.voip.ms [ip:  67.205. 74.187] is alive ( 87.16 ms)
 +
      montreal3.voip.ms [ip:  72. 55.168. 18] is alive ( 76.54 ms)
 +
      montreal4.voip.ms [ip:  67.205. 74.179] is alive ( 97.51 ms)
 +
      toronto2.voip.ms [ip: 184. 75.215.114] is alive (104.18 ms)
 +
      toronto3.voip.ms [ip: 184. 75.215.146] is alive (142.81 ms)
 +
      toronto4.voip.ms [ip: 184. 75.213.210] is alive (138.95 ms)
 +
        toronto.voip.ms [ip: 184. 75.215.106] is alive (103.78 ms)
 +
        london.voip.ms [ip:  5. 77. 36.136] is alive (153.14 ms)
 +
   
 +
    Round 4
 +
        atlanta.voip.ms [ip: 174. 34.146.162] is alive ( 89.19 ms)
 +
      atlanta2.voip.ms [ip:  72.  9.246.170] is alive ( 92.98 ms)
 +
        chicago.voip.ms [ip: 208.100. 39. 52] is alive ( 49.21 ms)
 +
      chicago2.voip.ms [ip: 208.100. 39. 53] is alive ( 60.50 ms)
 +
      chicago3.voip.ms [ip: 208.100. 39. 54] is alive ( 59.68 ms)
 +
      chicago4.voip.ms [ip: 208.100. 39. 55] is alive ( 50.18 ms)
 +
        dallas.voip.ms [ip:  74. 54. 54.178] is alive ( 93.93 ms)
 +
        denver.voip.ms [ip: 173.248.161. 90] is alive ( 94.22 ms)
 +
        denver2.voip.ms [ip: 173.248.159.210] is alive ( 85.10 ms)
 +
        houston.voip.ms [ip: 209. 62.  1.  2] is alive (103.67 ms)
 +
    losangeles.voip.ms [ip:  96. 44.149.186] is alive ( 65.58 ms)
 +
    losangeles2.voip.ms [ip:  96. 44.149.202] is alive ( 63.60 ms)
 +
        newyork.voip.ms [ip:  74. 63. 41.218] is alive (114.76 ms)
 +
      newyork2.voip.ms [ip: 107.  6. 67.236] is alive (120.44 ms)
 +
      newyork3.voip.ms [ip: 107.  6. 67.237] is alive (121.05 ms)
 +
      newyork4.voip.ms [ip: 107.  6. 67.238] is alive (110.51 ms)
 +
        seattle.voip.ms [ip:  50. 23.160. 50] is alive ( 94.04 ms)
 +
      seattle2.voip.ms [ip:  50. 23.160. 51] is alive ( 96.92 ms)
 +
      seattle3.voip.ms [ip:  50. 23.160. 52] is alive ( 91.23 ms)
 +
          tampa.voip.ms [ip:  68.233.226. 97] is alive (123.28 ms)
 +
    washington.voip.ms [ip: 208. 43.234.226] is alive ( 98.45 ms)
 +
    washington2.voip.ms [ip: 208. 43.234.227] is alive (100.94 ms)
 +
      montreal.voip.ms [ip:  67.205. 74.184] is alive ( 82.33 ms)
 +
      montreal2.voip.ms [ip:  67.205. 74.187] is alive ( 85.02 ms)
 +
      montreal3.voip.ms [ip:  72. 55.168. 18] is alive ( 76.85 ms)
 +
      montreal4.voip.ms [ip:  67.205. 74.179] is alive ( 96.32 ms)
 +
      toronto2.voip.ms [ip: 184. 75.215.114] is alive (104.22 ms)
 +
      toronto3.voip.ms [ip: 184. 75.215.146] is alive (148.33 ms)
 +
      toronto4.voip.ms [ip: 184. 75.213.210] is alive (141.61 ms)
 +
        toronto.voip.ms [ip: 184. 75.215.106] is alive (105.91 ms)
 +
        london.voip.ms [ip:  5. 77. 36.136] is alive (152.85 ms)
 +
   
 +
    Server              Average (ms)
 +
    atlanta.voip.ms      88.7630
 +
    atlanta2.voip.ms      92.9233
 +
    chicago.voip.ms      49.6477
 +
    chicago2.voip.ms      59.9305
 +
    chicago3.voip.ms      59.3972
 +
    chicago4.voip.ms      49.9152
 +
    dallas.voip.ms        95.0790
 +
    denver.voip.ms        94.8077
 +
    denver2.voip.ms      85.2797
 +
    houston.voip.ms      103.1562
 +
    losangeles.voip.ms    65.4693
 +
    losangeles2.voip.ms  63.8347
 +
    newyork.voip.ms      118.0643
 +
    newyork2.voip.ms    120.9265
 +
    newyork3.voip.ms    121.2778
 +
    newyork4.voip.ms    110.8275
 +
    seattle.voip.ms      93.9993
 +
    seattle2.voip.ms      95.8267
 +
    seattle3.voip.ms      91.1035
 +
    tampa.voip.ms        123.6570
 +
    washington.voip.ms    98.4065
 +
    washington2.voip.ms  101.3774
 +
    montreal.voip.ms      81.5525
 +
    montreal2.voip.ms    85.9863
 +
    montreal3.voip.ms    76.4058
 +
    montreal4.voip.ms    96.7013
 +
    toronto2.voip.ms    103.7986
 +
    toronto3.voip.ms    143.3156
 +
    toronto4.voip.ms    136.0254
 +
    toronto.voip.ms      104.1012
 +
    london.voip.ms      157.3885
-
*'''Search Range''': Select a Date Range of your SMS History. You can select a time period by marking the "Show Details" field and the text messages will be displayed.
+
=== Powershell ===
-
*'''Search Filter''': You can filter your Search by DID, Contact and Type (Sent, Received and Both).
+
Dec 2017 - A bug in the code shown washington2.voip.ms as the best server, this was corrected.
-
*'''Send New SMS Messages''': Another window will open by clicking here in order to create a new SMS Message.
+
<pre>
 +
# Usage: Copy and paste the following code into a powershell window
 +
# To run it from a command prompt, save this file with extension ps1.
 +
# Then run Powershell.exe -file "pathtothisscript.ps1"
 +
Clear-Variable best* -Scope Global #Clear the best* variables in case you run it more than once...
 +
#Get the list of servers into an array
 +
$Servers =     
 +
@("amsterdam.voip.ms","atlanta.voip.ms","atlanta2.voip.ms","chicago.voip.ms","chicago2.voip.ms","chicago3.voip.ms",
 +
"chicago4.voip.ms","dallas.voip.ms","dallas2.voip.ms","denver.voip.ms","denver2.voip.ms","houston.voip.ms",
 +
"houston2.voip.ms","london.voip.ms","losangeles.voip.ms","losangeles2.voip.ms","melbourne.voip.ms","montreal.voip.ms",
 +
"montreal2.voip.ms","montreal3.voip.ms","montreal4.voip.ms","montreal5.voip.ms","montreal6.voip.ms","montreal7.voip.ms",
 +
"montreal8.voip.ms","newyork.voip.ms","newyork2.voip.ms","newyork3.voip.ms","newyork4.voip.ms","newyork5.voip.ms",
 +
"newyork6.voip.ms","newyork7.voip.ms","newyork8.voip.ms","paris.voip.ms","sanjose.voip.ms","sanjose2.voip.ms",
 +
"seattle.voip.ms","seattle2.voip.ms","seattle3.voip.ms","tampa.voip.ms","tampa2.voip.ms","toronto.voip.ms",
 +
"toronto2.voip.ms","toronto3.voip.ms","toronto4.voip.ms","toronto5.voip.ms","toronto6.voip.ms","toronto7.voip.ms",
 +
"toronto8.voip.ms","vancouver.voip.ms","vancouver2.voip.ms","washington.voip.ms","washington2.voip.ms")
 +
$k = 0 #Counting variable so we know what server number we are testing
 +
#num of servers to test
 +
$servercount = $servers.length
 +
#Do the following code for each server in our array
 +
ForEach($server in $servers)
 +
 +
  #Add one to the counting variable....we are on server #1...then server 2, then server 3 etc...
 +
  $k++
 +
  #Update the progress bar                   
 +
  Write-Progress -Activity "Testing Server: ${server}" -status "Testing Server $k out of $servercount" -percentComplete ($k / $servercount*100)
 +
  #Counting variable for number of times we tried to ping a given server
 +
  $i = 0
 +
  Do{
 +
    #assume a failure
 +
    $pingsuccess = $false
 +
    $i++ #Add one to the counting variable.....1st try....2nd try....3rd try etc...
 +
    Try{
 +
        #Try to ping
 +
        $currentping = (test-connection $server -count 1 -ErrorAction Stop).responsetime
 +
        #If success full, set success variable
 +
        $pingsuccess = $true
 +
    }
 +
    #Catch the failure and set the success variable to false
 +
    Catch {
 +
      $pingsuccess = $false
 +
      }   
 +
  }
 +
  #Try everything between Do and While up to 5 times, or while $pingsuccess is not true
 +
  While($pingsuccess -eq $false -and $i -le 5)
 +
  #Compare the last ping test with the best known ping test....if there is no known best ping test, assume this one is the best $bestping = $currentping
 +
  If($pingsuccess -and ($currentping -lt $bestping -or (!($bestping)))){
 +
  #If this is the best ping...save it
 +
        $bestserver = $server    #Save the best server
 +
        $bestping = $currentping #Save the best ping results
 +
  }
 +
  write-host "tested: $server at $currentping ms after $i attempts" #write the results of the test for this server
 +
}
 +
write-host "`r`n The server with the best ping is: $bestserver at $bestping ms`r`n" #write the end result
 +
Pause
 +
</pre>
-
*'''Delete Selected Messages''': This action will delete any messages that you have selected, by clicking on the box next to them. '''This action cannot be undone.'''
+
=== Linux Shell Script ===
 +
Pings several voip.ms servers
-
*'''Delete All Messages''': Delete ALL your SMS Messages, both sent and received. '''This action cannot be undone.'''
+
  #!/bin/sh
 +
  # Ping several servers and display Latency, Jitter and Packet Loss
 +
  #
 +
  # First, create a text file with all servers you want to ping - one host name per line.  
 +
  # The list of voip.ms servers is available at http://wiki.voip.ms/article/Choosing_Server
 +
  myHF="voip_ping_hosts.txt"
 +
  # Sample file:
 +
  #    toronto.voip.ms
 +
  #    montreal.voip.ms
 +
  #    seattle.voip.ms
 +
  #    chicago.voip.ms
 +
  #    newyork.voip.ms
 +
  #
 +
  echo "============================================"
 +
  printf "%-20s %7s %8s %6s\n" "VoIP Server" "Latency" "Jitter" "Loss"
 +
  echo "============================================"
 +
  cat ${myHF} |\
 +
  while read myLn
 +
  do
 +
      ping -c 3 -i 5 -q $myLn |\
 +
      awk '/^PING / {myH=$2}
 +
          /packet loss/ {myPL=$6}
 +
          /min\/avg\/max/ {
 +
              split($4,myS,"/")
 +
              printf( "%-20s    %3.1f    %1.3f  %4s\n", myH, myS[2], myS[4], myPL)
 +
          }'
 +
  done
 +
  echo "============================================"
-
*'''Checking a Message''': To check a received SMS Message just click it directly in order to display the information.
+
Output:
-
===Create a New SMS Message===
+
  ============================================
 +
  VoIP Server          Latency  Jitter  Loss
 +
  ============================================
 +
  toronto.voip.ms        68.3    0.439    0%
 +
  montreal.voip.ms        89.6    0.197    0%
 +
  seattle.voip.ms        71.2    0.387    0%
 +
  chicago.voip.ms        71.6    0.084    0%
 +
  newyork.voip.ms        79.1    0.411    0%
 +
  ============================================
-
[[File:SMS41.png|thumb|none|600px]]
+
= Latency and its importance =
-
You can create a new '''SMS Message''' we will explain you all the parameters you can find on this section:
+
Latency is very important for Voip, this will determine the time that will take for the data package transmission to reach the destination. A high latency will lead to a delay and echoes in the communication.
-
* '''DID''': If you have more than one DID Number you can select any of the numbers available to send your message.  
+
Latency is measured in milliseconds (ms) For example: a latency of 150ms is barely noticeable, thus acceptable. Higher than that, quality starts to suffer. When it gets higher than 300 ms, it becomes unacceptable.
-
* '''Contact''': The destination phone number or if you have a [[Phone book|Phone book entry]] start typing the name and the system will display the information if available.
+
-
* '''Message''': You can create your message on that field, please note that you have up to 160 characters.
+
-
Then click on 'Send Message' to send the SMS.
+
[[category:guides]]

Revision as of 18:48, 24 May 2018

Contents

Choosing a Server

VoIP.ms offers many different servers, but which one should you choose? One misconception is that you should pick the closest to your location, however this is not needed most of the time. For example, if you are in the USA, any of the US servers will provide a really good latency and service quality. The newest server within a city is indicated with the highest number attached to the name, as they are classified in ascending order. Also worth noting is that there is a network tool that will help you when deciding which server you want to use, generally named a "ping", which will provide you the latency between you and the server. Therefore the server which provides you less latency should be used.

IPs

In the following links you will find a table with the server's information including their IP addresses.

Canada USA International
VoIP.ms servers

Server Realms

Please click here Server Realms to get the Realm Name for the server you plan on using, this can differ from the Domain Name being used.

Please note that the following servers will not be available to select as a DID Point of Presence for newer accounts: 
Atlanta 1, Chicago 1, New York 1, New York 4, Seattle 1, Montreal 1, Montreal 2, Montreal 3, Montreal 4, Toronto, Toronto 2, Toronto 3, Toronto 4.

What is a Ping?

Ping is a standard tool used to test network connections. It is mostly used to determine if a server or device can be reached across the network and the latency of the response(the time it takes to send a packet to the destination and for it to return to your computer).

Ping tools are part of Windows, Mac OS X and Linux as well as some routers.

How does the ping work?

It sends request messages to a target network address or DNS names at periodic intervals and measures the time it takes for a response message to arrive and return(better known as latency).

How to ping on a PC

Pinging is a command which tells you if the connection between your computer and a particular domain is working correctly.

In Windows, select Start > Programs > Accessories > Command Prompt. This will give you a window like the one below.

Enter the word ping, followed by a space, then the domain name.(montreal.voip.ms) in this case domain is our server name.

If the results show a series of replies, the connection is working. The time shows you how fast the connection is. If you see a "timed out" error instead of a reply, there is a breakdown somewhere between your computer and the domain.

Ping

How to ping on a Mac Computer

1- Click on Finder in the dock.

2- Click on Applications.

3- Click on Utilities.

4- Double-click on Network Utility. *

* In OS X Mavericks (10.9.x) this utility app changed location. Launch it from spotlight instead, either press "command"+"space bar" or click on spotlight directly (magnifying glass icon at top right of screen), type "network utility" and hit "return"

5- In the Network Utility window, click on the Ping tab

6- In the field under "Please enter the network address to ping," like montreal.voip.ms


If pings results are not consistent, you may have an issue with Jitter. You can work on this issue by adjusting the "Network Jitter Level" setting on your VoIP device. Usually a ping of under 150 ms is recommended in order to have good quality. The latency time to the server is important, however there are also other factors that could affect the quality of the calls such as packet loss (VoIP communications are very sensitive to this), and the Jitter level of your Internet connection.

The following is the output of running ping with the target losangeles.voip.ms.

#ping losangeles.voip.ms
Ping to losangeles.voip.ms [67.215.241.250] with 32 bytes de datos:
Response from 67.215.241.250: bytes=32 time=67ms TTL=52
Response from 67.215.241.250: bytes=32 time=69ms TTL=52
Response from 67.215.241.250: bytes=32 time=68ms TTL=52
Response from 67.215.241.250: bytes=32 time=67ms TTL=52
ping statistics from 67.215.241.250:
4 packets transmitted, 4 received, 0% packet lost. rtt min/avg/max/mdev = 67ms, 69ms, 67ms

Sample ping output in windows:

C:\Windows\system32>ping montreal.voip.ms

Pinging montreal.voip.ms [67.205.74.184] with 32 bytes of data:
Reply from 67.205.74.184: bytes=32 time=85ms TTL=49
Reply from 67.205.74.184: bytes=32 time=86ms TTL=49
Reply from 67.205.74.184: bytes=32 time=86ms TTL=49
Reply from 67.205.74.184: bytes=32 time=85ms TTL=49

Ping statistics for 67.205.74.184:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 85ms, Maximum = 86ms, Average = 85ms


Latency Testing Scripts (User Submitted)

All the following scripts were produced by voip.ms users who felt others might also benefit from the output of their efforts. They were written over a span of Years and probably need adjusting before you use them, to cater for changes in servers over time and changes in policies (like not testing heavily subscribed servers which are not open to new registrations)

If you aren't satisfied that the scripts are safe or simply don’t like the way they syntactically appear, you can still manually ping a selection of servers and choose a server based on the best latency. The following scripts are essentially just wrappers around the ping command which support lists of servers to feed to ping and present the output in a readable format.

If you feel you have a simpler cleaner script that works for another platform or language, please do add it to this wiki via a support ticket.

Bash Script To Handle The Mac Ping Output Format

To make use of this script (1) save as a plain text file (2) set permissions on the file to executable (3) invoke script e.g. Save script below using your favourite editor as pingVoipMS.sh (2) chmod u+x pingVoipMS.sh (3) ./pingVoipMS.sh This is a bash 3.x script, so it also works in Linux, just change the ping packet loss field from 7 to 6 in the final loop below (or wherever the loss field is in your ping output format). Depending upon your distro curl might need to change to wget.

#!/bin/bash
# Ping several servers and display Latency, Jitter and Packet Loss
#      Usage: [-c <count>][-i <wait time>][-r test restricted servers][<server list file>]
#
# The optional text file should be formatted with one host name per line.
# The list of voip.ms servers is available at http://wiki.voip.ms/article/Choosing_Server
# If no args are supplied, this script will scrape a ping server list from voip.ms
#
USER_FILE=""
COUNT=3; INTERVAL=5; RESTRICTED=0
restrictedList=(atlanta.voip.ms chicago.voip.ms
                montreal.voip.ms montreal2.voip.ms montreal3.voip.ms montreal4.voip.ms
                newyork.voip.ms newyork4.voip.ms seattle.voip.ms
                toronto.voip.ms toronto2.voip.ms toronto3.voip.ms toronto4.voip.ms)

# Handle any passed in script arguments
while getopts c:i:r parm
do
    case $parm in
        c)count_opt=$OPTARG;;
        i)interval_opt=$OPTARG;;
        r)RESTRICTED=1;;
        *)echo -e "Invalid arg\nUsage:\t[ -c <count of ECHO_REQUESTs to Tx, default 3> ] \
                  \n\t[ -i <wait time (s) between datagrams, default 5> ]                \
                  \n\t[ -r ] Include restricted servers in latency test                  \
                  \n\t[FILE <ping server list> ]";exit 1;;
    esac
done

# Test if an option was specified and whether it's a +ve non-zero integer
[[ -n $count_opt    && ($count_opt =~ ^[[:digit:]]+$)    && $count_opt -gt 0 ]]    && COUNT=$count_opt
[[ -n $interval_opt && ($interval_opt =~ ^[[:digit:]]+$) && $interval_opt -gt 0 ]] && INTERVAL=$interval_opt

shift $(($OPTIND -1))

# Validate supplied file (server list)
[[ -n $1 && !(-f $1 && -r $1) ]] && { echo "\"$1\" file does not exist or is not readable"; exit 1; }
[[ -n $1 && -f $1 && -r $1 ]] && USER_FILE="$1"

if [[ -n $USER_FILE ]]
then
# Bash 3.x in macOS does not support readarray, need to do cumbersome array loops instead
    while IFS= read -r line; do
        serverList+=( "$line" )
    done < <(grep -e '[[:alpha:]]*[[:alnum:]]\.voip\.ms' $USER_FILE | grep  -v '^\s*#' | awk NF)
else
# N.B. The script looks for the html boldface tags <b> </b> inside a bracket
# If the website alters and the parse fails, manually create the list and
# supply as a script arg (or perhaps update the parsing to work again :)
    while IFS= read -r line; do
        serverList+=( "$line" )
    done < <(curl --silent http://wiki.voip.ms/article/Choosing_Server | \
             grep '(<b>[[:alpha:]]*[[:alnum:]]\.voip\.ms</b>)'         | \
             tr "<>" " " | awk '{print $(NF-3)}'                         )
fi

# Newer voip.ms clients can't register onto these over-subscribed servers
# Don't test the restricted list unless explicitly asked (with the -r cmd line option)
if [[ $RESTRICTED -eq 0 ]]
then
    for server in ${restrictedList[@]}
    do
        ix=$(printf "%s\n" "${serverList[@]}" | grep -n "^${server}" | cut -d ":" -f1)

        while IFS= read -r idx; do
            keys+=($idx)
        done < <([[ $ix -gt 0 ]] && echo $((ix-1)))
    done
    for ((i=${#keys[@]} - 1; i >= 0; i--)); do unset serverList[keys[i]]; done
fi

if [[ ${#serverList[@]} -eq 0 ]]
then
    echo "No unrestricted Voip.ms servers could be found, please supply a server list"
    exit 1
fi

runTime=$(( $COUNT * $INTERVAL * ${#serverList[@]} ))

echo "PING will send $COUNT packet(s) with a wait of $INTERVAL sec(s) between each packet"
echo "Change the PING options by invoking this script with -c and/or -i, default \"-c 3 -i 5\""
echo "Over $((${#serverList[@]})) server(s) the estimated script Run Time will be $runTime seconds"
echo "================================================================"
printf "%-20s %-18s %7s %8s %6s   %s\n" "VoIP Server" "IP Address" "Latency" "Jitter" "Loss" "Countdown"
echo "================================================================  (seconds)"

for myLn in ${serverList[@]}
do
     while IFS=$'\n' read -r line; do
         pingList+=( "$line" )
         printf "%-64s %5d   %2d/%-2d\n" "$line" "$((runTime - $COUNT * $INTERVAL * ${#pingList[@]}))" "${#pingList[@]}" "${#serverList[@]}"
     done < <( ping -c $COUNT -i $INTERVAL -q $myLn | awk '\
        /^PING / {myH=$2}
        /^PING / {
            IP = substr($3,2,15)
            split(IP,myIP,")") }
        /packet loss/ {myPL=$7}
        /min\/avg\/max/ {
            split($4,myS,"/")
            printf("%-20s %-18s %7.3f %8.3f %6s\n",
                    myH, myIP[1], myS[2], myS[4], myPL ) }
    ' )
done

echo "================================================================"
echo -e "\nMost appropriate server listed in order of best latency\n"
echo "================================================================"
printf "%-20s %-18s %7s %8s %6s\n" "VoIP Server" "IP Address" "Latency" "Jitter" "Loss"
echo "================================================================"
printf "%s\n" "${pingList[@]}" | LC_ALL=C sort -n -k 3,3 -k 5,5 -k 4,4 | awk '{printf("%s    \(%2d\)\n",$0, NR)}'
echo "================================================================"

Perl Script

Pings list of voip.ms servers round robin with optional output csv file.

   # usage ping_voip.ms.pl <number of times> <seconds in between> <output.csv>
   use Net::Ping;
   use Time::HiRes;
   use strict;
   
   # input list 
   my @hosts = qw(
       atlanta.voip.ms
       atlanta2.voip.ms
       chicago.voip.ms
       chicago2.voip.ms
       chicago3.voip.ms
       chicago4.voip.ms
       dallas.voip.ms
       denver.voip.ms
       denver2.voip.ms
       houston.voip.ms
       losangeles.voip.ms
       losangeles2.voip.ms
       newyork.voip.ms
       newyork2.voip.ms
       newyork3.voip.ms
       newyork4.voip.ms
       seattle.voip.ms
       seattle2.voip.ms
       seattle3.voip.ms
       tampa.voip.ms
       washington.voip.ms
       washington2.voip.ms
       montreal.voip.ms
       montreal2.voip.ms
       montreal3.voip.ms
       montreal4.voip.ms
       toronto2.voip.ms
       toronto3.voip.ms
       toronto4.voip.ms
       toronto.voip.ms
       london.voip.ms
   );
   
   $| = 1; #autoflush
   # High precision syntax (requires Time::HiRes)
   my $p = Net::Ping->new("icmp",1);
   $p->hires();
   my $max_name_length = (reverse sort { $a <=> $b } map { length($_) } @hosts)[0];
   my $count = 4; # number of times to ping
   my $interval = 5; # seconds between ping rounds
   my $output_file = "";
   my @data;
   
   # check for arguments
   my $num_args = @ARGV;
   if ($num_args >= 1) {$count = $ARGV[0];}
   if ($num_args >= 2) {$interval = $ARGV[1];}
   if ($num_args >= 3) {$output_file = $ARGV[2];}
   
   # check argument validity
   $0 =~ /^.*\\(.*)$/;
   my $script = $1;
   if ($count !~ /^\d+$/ or $interval !~ /^\d+$/) {die "Usage: $script <number of rounds> <seconds between rounds> <output.csv>\n";}
   if (length($output_file) > 0 and $output_file !~ /\.csv$/) {$output_file .= ".csv";}
   
   # main loop
   for my $i (1..$count)
   {
       sleep $interval unless $i == 1;
       print "Round $i\n";
       my $host_num=0;
       foreach my $host (@hosts)
       {
           (my $ret, my $duration, my $ip) = $p->ping($host);
           $ip =~ /(\d+)\.(\d+)\.(\d+)\.(\d+)/; 
           if ($ret)
           {
               printf("%*s [ip: %3s.%3s.%3s.%3s] is alive (%6.2f ms)\n", $max_name_length, $host, $1, $2, $3, $4, $duration*1000);
               $data[$host_num][$i]=$duration*1000;
           }
           else
           {
               printf("%*s [ip: %3s.%3s.%3s.%3s] is dead\n", $max_name_length, $host, $1, $2, $3, $4);
           }
           $host_num++;
       }
       print "\n";
   }
   $p->close();
   
   # if output file name given
   if (length($output_file)>0)
   {
       # print output to file
       open FILE, ">$output_file" or die "$!\n";
       
       # print column headers
       print FILE "Server\\Round";
       for my $i (1..$count)
       {
           print FILE ", $i";
       }
       print FILE ", Average\n";
       
       # print data
       my $i = 0;
       foreach my $host (@hosts)
       {
           print FILE "$host";
           my $sum = 0;
           for my $j (1..$count)
           {
               $sum += $data[$i][$j];
               printf FILE ", %8.4f",$data[$i][$j];
           }
           printf FILE ", %8.4f\n",$sum/$count;
           $i++;
       }
       
       close FILE;
       print "Data written to $output_file\n";
   }
   
   # print summary to screen
   my $i = 0;
   printf("%-*s Average (ms)\n", $max_name_length, "Server");
   foreach my $host (@hosts)
   {
       my $sum = 0;
       for my $j (1..$count)
       {
           $sum += $data[$i][$j];
       }
       printf("%-*s %8.4f\n", $max_name_length+1, $host, $sum/$count);
       $i++;
   }


Output:

   Round 1
       atlanta.voip.ms [ip: 174. 34.146.162] is alive ( 88.97 ms)
      atlanta2.voip.ms [ip:  72.  9.246.170] is alive ( 92.99 ms)
       chicago.voip.ms [ip: 208.100. 39. 52] is alive ( 49.70 ms)
      chicago2.voip.ms [ip: 208.100. 39. 53] is alive ( 59.76 ms)
      chicago3.voip.ms [ip: 208.100. 39. 54] is alive ( 59.53 ms)
      chicago4.voip.ms [ip: 208.100. 39. 55] is alive ( 49.73 ms)
        dallas.voip.ms [ip:  74. 54. 54.178] is alive ( 94.99 ms)
        denver.voip.ms [ip: 173.248.161. 90] is alive ( 94.05 ms)
       denver2.voip.ms [ip: 173.248.159.210] is alive ( 85.13 ms)
       houston.voip.ms [ip: 209. 62.  1.  2] is alive (102.87 ms)
    losangeles.voip.ms [ip:  96. 44.149.186] is alive ( 64.92 ms)
   losangeles2.voip.ms [ip:  96. 44.149.202] is alive ( 63.41 ms)
       newyork.voip.ms [ip:  74. 63. 41.218] is alive (131.75 ms)
      newyork2.voip.ms [ip: 107.  6. 67.236] is alive (120.64 ms)
      newyork3.voip.ms [ip: 107.  6. 67.237] is alive (120.49 ms)
      newyork4.voip.ms [ip: 107.  6. 67.238] is alive (111.43 ms)
       seattle.voip.ms [ip:  50. 23.160. 50] is alive ( 94.25 ms)
      seattle2.voip.ms [ip:  50. 23.160. 51] is alive ( 95.86 ms)
      seattle3.voip.ms [ip:  50. 23.160. 52] is alive ( 90.85 ms)
         tampa.voip.ms [ip:  68.233.226. 97] is alive (123.29 ms)
    washington.voip.ms [ip: 208. 43.234.226] is alive ( 98.71 ms)
   washington2.voip.ms [ip: 208. 43.234.227] is alive (101.19 ms)
      montreal.voip.ms [ip:  67.205. 74.184] is alive ( 81.82 ms)
     montreal2.voip.ms [ip:  67.205. 74.187] is alive ( 86.13 ms)
     montreal3.voip.ms [ip:  72. 55.168. 18] is alive ( 77.09 ms)
     montreal4.voip.ms [ip:  67.205. 74.179] is alive ( 96.18 ms)
      toronto2.voip.ms [ip: 184. 75.215.114] is alive (103.70 ms)
      toronto3.voip.ms [ip: 184. 75.215.146] is alive (131.27 ms)
      toronto4.voip.ms [ip: 184. 75.213.210] is alive (125.13 ms)
       toronto.voip.ms [ip: 184. 75.215.106] is alive (103.26 ms)
        london.voip.ms [ip:   5. 77. 36.136] is alive (152.77 ms)
   
   Round 2
       atlanta.voip.ms [ip: 174. 34.146.162] is alive ( 88.14 ms)
      atlanta2.voip.ms [ip:  72.  9.246.170] is alive ( 92.86 ms)
       chicago.voip.ms [ip: 208.100. 39. 52] is alive ( 50.03 ms)
      chicago2.voip.ms [ip: 208.100. 39. 53] is alive ( 59.44 ms)
      chicago3.voip.ms [ip: 208.100. 39. 54] is alive ( 59.33 ms)
      chicago4.voip.ms [ip: 208.100. 39. 55] is alive ( 50.22 ms)
        dallas.voip.ms [ip:  74. 54. 54.178] is alive ( 95.58 ms)
        denver.voip.ms [ip: 173.248.161. 90] is alive ( 95.94 ms)
       denver2.voip.ms [ip: 173.248.159.210] is alive ( 85.29 ms)
       houston.voip.ms [ip: 209. 62.  1.  2] is alive (102.73 ms)
    losangeles.voip.ms [ip:  96. 44.149.186] is alive ( 65.59 ms)
   losangeles2.voip.ms [ip:  96. 44.149.202] is alive ( 64.27 ms)
       newyork.voip.ms [ip:  74. 63. 41.218] is alive (112.74 ms)
      newyork2.voip.ms [ip: 107.  6. 67.236] is alive (121.22 ms)
      newyork3.voip.ms [ip: 107.  6. 67.237] is alive (121.34 ms)
      newyork4.voip.ms [ip: 107.  6. 67.238] is alive (110.75 ms)
       seattle.voip.ms [ip:  50. 23.160. 50] is alive ( 94.06 ms)
      seattle2.voip.ms [ip:  50. 23.160. 51] is alive ( 95.33 ms)
      seattle3.voip.ms [ip:  50. 23.160. 52] is alive ( 91.58 ms)
         tampa.voip.ms [ip:  68.233.226. 97] is alive (122.94 ms)
    washington.voip.ms [ip: 208. 43.234.226] is alive ( 98.28 ms)
   washington2.voip.ms [ip: 208. 43.234.227] is alive (101.40 ms)
      montreal.voip.ms [ip:  67.205. 74.184] is alive ( 81.91 ms)
     montreal2.voip.ms [ip:  67.205. 74.187] is alive ( 85.64 ms)
     montreal3.voip.ms [ip:  72. 55.168. 18] is alive ( 75.15 ms)
     montreal4.voip.ms [ip:  67.205. 74.179] is alive ( 96.79 ms)
      toronto2.voip.ms [ip: 184. 75.215.114] is alive (103.10 ms)
      toronto3.voip.ms [ip: 184. 75.215.146] is alive (150.85 ms)
      toronto4.voip.ms [ip: 184. 75.213.210] is alive (138.40 ms)
       toronto.voip.ms [ip: 184. 75.215.106] is alive (103.45 ms)
        london.voip.ms [ip:   5. 77. 36.136] is alive (170.79 ms)
   
   Round 3
       atlanta.voip.ms [ip: 174. 34.146.162] is alive ( 88.76 ms)
      atlanta2.voip.ms [ip:  72.  9.246.170] is alive ( 92.86 ms)
       chicago.voip.ms [ip: 208.100. 39. 52] is alive ( 49.65 ms)
      chicago2.voip.ms [ip: 208.100. 39. 53] is alive ( 60.01 ms)
      chicago3.voip.ms [ip: 208.100. 39. 54] is alive ( 59.05 ms)
      chicago4.voip.ms [ip: 208.100. 39. 55] is alive ( 49.53 ms)
        dallas.voip.ms [ip:  74. 54. 54.178] is alive ( 95.82 ms)
        denver.voip.ms [ip: 173.248.161. 90] is alive ( 95.02 ms)
       denver2.voip.ms [ip: 173.248.159.210] is alive ( 85.60 ms)
       houston.voip.ms [ip: 209. 62.  1.  2] is alive (103.35 ms)
    losangeles.voip.ms [ip:  96. 44.149.186] is alive ( 65.79 ms)
   losangeles2.voip.ms [ip:  96. 44.149.202] is alive ( 64.05 ms)
       newyork.voip.ms [ip:  74. 63. 41.218] is alive (113.01 ms)
      newyork2.voip.ms [ip: 107.  6. 67.236] is alive (121.41 ms)
      newyork3.voip.ms [ip: 107.  6. 67.237] is alive (122.23 ms)
      newyork4.voip.ms [ip: 107.  6. 67.238] is alive (110.62 ms)
       seattle.voip.ms [ip:  50. 23.160. 50] is alive ( 93.65 ms)
      seattle2.voip.ms [ip:  50. 23.160. 51] is alive ( 95.19 ms)
      seattle3.voip.ms [ip:  50. 23.160. 52] is alive ( 90.75 ms)
         tampa.voip.ms [ip:  68.233.226. 97] is alive (125.12 ms)
    washington.voip.ms [ip: 208. 43.234.226] is alive ( 98.19 ms)
   washington2.voip.ms [ip: 208. 43.234.227] is alive (101.98 ms)
      montreal.voip.ms [ip:  67.205. 74.184] is alive ( 80.16 ms)
     montreal2.voip.ms [ip:  67.205. 74.187] is alive ( 87.16 ms)
     montreal3.voip.ms [ip:  72. 55.168. 18] is alive ( 76.54 ms)
     montreal4.voip.ms [ip:  67.205. 74.179] is alive ( 97.51 ms)
      toronto2.voip.ms [ip: 184. 75.215.114] is alive (104.18 ms)
      toronto3.voip.ms [ip: 184. 75.215.146] is alive (142.81 ms)
      toronto4.voip.ms [ip: 184. 75.213.210] is alive (138.95 ms)
       toronto.voip.ms [ip: 184. 75.215.106] is alive (103.78 ms)
        london.voip.ms [ip:   5. 77. 36.136] is alive (153.14 ms)
   
   Round 4
       atlanta.voip.ms [ip: 174. 34.146.162] is alive ( 89.19 ms)
      atlanta2.voip.ms [ip:  72.  9.246.170] is alive ( 92.98 ms)
       chicago.voip.ms [ip: 208.100. 39. 52] is alive ( 49.21 ms)
      chicago2.voip.ms [ip: 208.100. 39. 53] is alive ( 60.50 ms)
      chicago3.voip.ms [ip: 208.100. 39. 54] is alive ( 59.68 ms)
      chicago4.voip.ms [ip: 208.100. 39. 55] is alive ( 50.18 ms)
        dallas.voip.ms [ip:  74. 54. 54.178] is alive ( 93.93 ms)
        denver.voip.ms [ip: 173.248.161. 90] is alive ( 94.22 ms)
       denver2.voip.ms [ip: 173.248.159.210] is alive ( 85.10 ms)
       houston.voip.ms [ip: 209. 62.  1.  2] is alive (103.67 ms)
    losangeles.voip.ms [ip:  96. 44.149.186] is alive ( 65.58 ms)
   losangeles2.voip.ms [ip:  96. 44.149.202] is alive ( 63.60 ms)
       newyork.voip.ms [ip:  74. 63. 41.218] is alive (114.76 ms)
      newyork2.voip.ms [ip: 107.  6. 67.236] is alive (120.44 ms)
      newyork3.voip.ms [ip: 107.  6. 67.237] is alive (121.05 ms)
      newyork4.voip.ms [ip: 107.  6. 67.238] is alive (110.51 ms)
       seattle.voip.ms [ip:  50. 23.160. 50] is alive ( 94.04 ms)
      seattle2.voip.ms [ip:  50. 23.160. 51] is alive ( 96.92 ms)
      seattle3.voip.ms [ip:  50. 23.160. 52] is alive ( 91.23 ms)
         tampa.voip.ms [ip:  68.233.226. 97] is alive (123.28 ms)
    washington.voip.ms [ip: 208. 43.234.226] is alive ( 98.45 ms)
   washington2.voip.ms [ip: 208. 43.234.227] is alive (100.94 ms)
      montreal.voip.ms [ip:  67.205. 74.184] is alive ( 82.33 ms)
     montreal2.voip.ms [ip:  67.205. 74.187] is alive ( 85.02 ms)
     montreal3.voip.ms [ip:  72. 55.168. 18] is alive ( 76.85 ms)
     montreal4.voip.ms [ip:  67.205. 74.179] is alive ( 96.32 ms)
      toronto2.voip.ms [ip: 184. 75.215.114] is alive (104.22 ms)
      toronto3.voip.ms [ip: 184. 75.215.146] is alive (148.33 ms)
      toronto4.voip.ms [ip: 184. 75.213.210] is alive (141.61 ms)
       toronto.voip.ms [ip: 184. 75.215.106] is alive (105.91 ms)
        london.voip.ms [ip:   5. 77. 36.136] is alive (152.85 ms)
   
   Server              Average (ms)
   atlanta.voip.ms       88.7630
   atlanta2.voip.ms      92.9233
   chicago.voip.ms       49.6477
   chicago2.voip.ms      59.9305
   chicago3.voip.ms      59.3972
   chicago4.voip.ms      49.9152
   dallas.voip.ms        95.0790
   denver.voip.ms        94.8077
   denver2.voip.ms       85.2797
   houston.voip.ms      103.1562
   losangeles.voip.ms    65.4693
   losangeles2.voip.ms   63.8347
   newyork.voip.ms      118.0643
   newyork2.voip.ms     120.9265
   newyork3.voip.ms     121.2778
   newyork4.voip.ms     110.8275
   seattle.voip.ms       93.9993
   seattle2.voip.ms      95.8267
   seattle3.voip.ms      91.1035
   tampa.voip.ms        123.6570
   washington.voip.ms    98.4065
   washington2.voip.ms  101.3774
   montreal.voip.ms      81.5525
   montreal2.voip.ms     85.9863
   montreal3.voip.ms     76.4058
   montreal4.voip.ms     96.7013
   toronto2.voip.ms     103.7986
   toronto3.voip.ms     143.3156
   toronto4.voip.ms     136.0254
   toronto.voip.ms      104.1012
   london.voip.ms       157.3885

Powershell

Dec 2017 - A bug in the code shown washington2.voip.ms as the best server, this was corrected.
# Usage: Copy and paste the following code into a powershell window
# To run it from a command prompt, save this file with extension ps1. 
# Then run Powershell.exe -file "pathtothisscript.ps1"
Clear-Variable best* -Scope Global #Clear the best* variables in case you run it more than once...
#Get the list of servers into an array
$Servers =      
@("amsterdam.voip.ms","atlanta.voip.ms","atlanta2.voip.ms","chicago.voip.ms","chicago2.voip.ms","chicago3.voip.ms",
"chicago4.voip.ms","dallas.voip.ms","dallas2.voip.ms","denver.voip.ms","denver2.voip.ms","houston.voip.ms",
"houston2.voip.ms","london.voip.ms","losangeles.voip.ms","losangeles2.voip.ms","melbourne.voip.ms","montreal.voip.ms",
"montreal2.voip.ms","montreal3.voip.ms","montreal4.voip.ms","montreal5.voip.ms","montreal6.voip.ms","montreal7.voip.ms",
"montreal8.voip.ms","newyork.voip.ms","newyork2.voip.ms","newyork3.voip.ms","newyork4.voip.ms","newyork5.voip.ms",
"newyork6.voip.ms","newyork7.voip.ms","newyork8.voip.ms","paris.voip.ms","sanjose.voip.ms","sanjose2.voip.ms",
"seattle.voip.ms","seattle2.voip.ms","seattle3.voip.ms","tampa.voip.ms","tampa2.voip.ms","toronto.voip.ms",
"toronto2.voip.ms","toronto3.voip.ms","toronto4.voip.ms","toronto5.voip.ms","toronto6.voip.ms","toronto7.voip.ms",
"toronto8.voip.ms","vancouver.voip.ms","vancouver2.voip.ms","washington.voip.ms","washington2.voip.ms")
$k = 0 #Counting variable so we know what server number we are testing
#num of servers to test
$servercount = $servers.length 
#Do the following code for each server in our array
ForEach($server in $servers)
{  
  #Add one to the counting variable....we are on server #1...then server 2, then server 3 etc...
  $k++
  #Update the progress bar                    
  Write-Progress -Activity "Testing Server: ${server}" -status "Testing Server $k out of $servercount" -percentComplete ($k / $servercount*100) 
  #Counting variable for number of times we tried to ping a given server
  $i = 0
  Do{
     #assume a failure
     $pingsuccess = $false 
     $i++ #Add one to the counting variable.....1st try....2nd try....3rd try etc...
     Try{
         #Try to ping
         $currentping = (test-connection $server -count 1 -ErrorAction Stop).responsetime 
         #If success full, set success variable
         $pingsuccess = $true
     }
     #Catch the failure and set the success variable to false
     Catch {
      $pingsuccess = $false 
      }     
  }
  #Try everything between Do and While up to 5 times, or while $pingsuccess is not true
  While($pingsuccess -eq $false -and $i -le 5) 
  #Compare the last ping test with the best known ping test....if there is no known best ping test, assume this one is the best $bestping = $currentping 
  If($pingsuccess -and ($currentping -lt $bestping -or (!($bestping)))){ 
  #If this is the best ping...save it
        $bestserver = $server    #Save the best server
        $bestping = $currentping #Save the best ping results
  }
  write-host "tested: $server at $currentping ms after $i attempts" #write the results of the test for this server
}
write-host "`r`n The server with the best ping is: $bestserver at $bestping ms`r`n" #write the end result
Pause

Linux Shell Script

Pings several voip.ms servers

  #!/bin/sh
  # Ping several servers and display Latency, Jitter and Packet Loss 
  #
  # First, create a text file with all servers you want to ping - one host name per line. 
  # The list of voip.ms servers is available at http://wiki.voip.ms/article/Choosing_Server
  myHF="voip_ping_hosts.txt"
  # Sample file:
  #    toronto.voip.ms
  #    montreal.voip.ms
  #    seattle.voip.ms
  #    chicago.voip.ms
  #    newyork.voip.ms
  #
  echo "============================================"
  printf "%-20s %7s %8s %6s\n" "VoIP Server" "Latency" "Jitter" "Loss"
  echo "============================================"
  cat ${myHF} |\
  while read myLn
  do
     ping -c 3 -i 5 -q $myLn |\
     awk '/^PING / {myH=$2}
          /packet loss/ {myPL=$6}
          /min\/avg\/max/ {
             split($4,myS,"/")
             printf( "%-20s    %3.1f    %1.3f   %4s\n", myH, myS[2], myS[4], myPL)
         }'
  done
  echo "============================================"

Output:

  ============================================
  VoIP Server          Latency   Jitter   Loss
  ============================================
  toronto.voip.ms         68.3    0.439     0%
  montreal.voip.ms        89.6    0.197     0%
  seattle.voip.ms         71.2    0.387     0%
  chicago.voip.ms         71.6    0.084     0%
  newyork.voip.ms         79.1    0.411     0%
  ============================================

Latency and its importance

Latency is very important for Voip, this will determine the time that will take for the data package transmission to reach the destination. A high latency will lead to a delay and echoes in the communication.

Latency is measured in milliseconds (ms) For example: a latency of 150ms is barely noticeable, thus acceptable. Higher than that, quality starts to suffer. When it gets higher than 300 ms, it becomes unacceptable.

Personal tools
Namespaces
Variants
Actions
VoIP.ms Wiki
Guides 🇨🇦
Guías 🇲🇽