I tried sql ping for a while, the command line version, but it takes forever because it needs to look at each IP.
It returns a nice report of what version and all but it started to fail for some reason so I gave it up.
I also found that using the sqlcmd -L is problematic in that it only reports on servers on the subnet that you run it on.
My current solution is to use powershell against AD and it runs very fast so I can run it each night and compare the results against my table of previously known sql servers.
I did some testing of turning sql services off on a test server and the powershell script did not report the server if the service was off.
This is probably not as important as finding a new one that someone installed but forgot to tell you about.