From: Todd Benson Date: 2008-08-30T20:41:29+09:00 Subject: Re: Ping.pingecho On Fri, Aug 29, 2008 at 11:01 PM, john maclean wrote: > 2008/8/29 John Pritchard-williams : >> john maclean wrote: >>> Cisco.com don't normally allow pings so tracroutes and pings won't get >>> echo requests. >>> >>> >>> irb(main):003:0> Ping.pingecho('cisco.com', 10, 80) >>> => true >>> >>> How come this works and `ping` does not? From irb I see that Ruby's >>> ping uses a TCP echo. Also I've run tcpdump whilst running ping.echo >>> and could not determine the port that it uses. What port does Ruby's >>> Ping use? >> >> check out: >> >> http://www.noobkit.com/show/ruby/ruby/standard-library/ping/pingecho.html >> >> According to this the 'echo' port. >> >> grep'ing 'echo' in my /etc/services reveals this is port 7...apparently. >> (UDP and TCP). >> >> >> >> -- >> Posted via http://www.ruby-forum.com/. >> >> > > Thanks for the reply. pinging on the echo port makes sense. However > one can ping a host for service and get a response even if that > service is not actually running on the host. > > services = %w{bacula-dir distcc echo fax git hostname http https icmpd > kermit keyserver ldap mbus msexch-routing mysql nmap postgres quake > rsync rwhois shell squid ssh svn telnet traceroute tunnel whoami wins > x11} > > wooota = '192.168.1.1' > > services.each do |x| > p %Q{checking host #{host} for protocol #{x}} > p Socket.getaddrinfo(host, x) > end > > > I get responses even though I __know__ that these services are __not__ > running on my router. Is this because pingecho sends packets on port 7 > regardless of the service that one requests? I suspect the zeroth entry doesn't mean anything, just that the command ran without error. For example, try Socket.getaddrinfo('0.0.0.0', 'smtp'). Todd