• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

vaurdan

Pingar um IP e verificar se este se encontra online

7 mensagens neste tópico

Como se faz isto? Alguem me pode explicar? Já andei à procura pela net mas nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu tenho este codigo:

            Ping pingSender = new Ping();
            PingOptions options = new PingOptions();

            // Use the default Ttl value which is 128,
            // but change the fragmentation behavior.
            options.DontFragment = true;

            // Create a buffer of 32 bytes of data to be transmitted.
            string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
            byte[] buffer = Encoding.ASCII.GetBytes(data);
            int timeout = 120;
            string address = "http://www.microsoft.org";
            PingReply reply = pingSender.Send (address, timeout, buffer, options);
            if (reply.Status == IPStatus.Success)
            {
                MessageBox.Show("Online");
            }
            else
            {
                MessageBox.Show("Offline");
            }

colocado no private void Form1_Load

mas ta-me a dar um erro:

System.Net.NetworkInformation.PingException was unhandled

Message="An exception occurred during a Ping request."

  Source="System"

  StackTrace:

      at System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 timeout, Byte[] buffer, PingOptions options)

      at WindowsApplication1.Form1.Form1_Load(Object sender, EventArgs e) in C:\Documents and Settings\Henrique\Os meus documentos\Visual Studio 2005\Projects\aTuaEscola\aTuaEscola\Form1.cs:line 84

      at System.Windows.Forms.Form.OnLoad(EventArgs e)

      at System.Windows.Forms.Form.OnCreateControl()

      at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)

      at System.Windows.Forms.Control.CreateControl()

      at System.Windows.Forms.Control.WmShowWindow(Message& m)

      at System.Windows.Forms.Control.WndProc(Message& m)

      at System.Windows.Forms.ScrollableControl.WndProc(Message& m)

      at System.Windows.Forms.ContainerControl.WndProc(Message& m)

      at System.Windows.Forms.Form.WmShowWindow(Message& m)

      at System.Windows.Forms.Form.WndProc(Message& m)

      at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

      at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

      at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

      at System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)

      at System.Windows.Forms.Control.SetVisibleCore(Boolean value)

      at System.Windows.Forms.Form.SetVisibleCore(Boolean value)

      at System.Windows.Forms.Control.set_Visible(Boolean value)

      at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)

      at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)

      at System.Windows.Forms.Application.Run(Form mainForm)

      at WindowsApplication1.Program.Main() in C:\Documents and Settings\Henrique\Os meus documentos\Visual Studio 2005\Projects\aTuaEscola\aTuaEscola\Program.cs:line 17

      at System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)

      at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)

      at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()

      at System.Threading.ThreadHelper.ThreadStart_Context(Object state)

      at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

      at System.Threading.ThreadHelper.ThreadStart()

Ele compila, mas na execução dá esse erro (Linha: PingReply reply = pingSender.Send (address, timeout, buffer, options);)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se fazes ping e ele responde é porque o servidor está "up and running".

No entanto, pelo facto do serviço de ping te responder não quer dizer que todos os serviços estejam "up and running".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim de repente, o que me salta à vista, é estares a colocar um endereço no formato http:// (um URI) ao invés de um endereço IP ou Hostname.

Olhando para a definição no MSDN:

When sending the request, you must specify the remote computer. You can do this by providing a host name string, an IP address in string format, or an IPAddress object.

Como não conheço a linguagem C# e sendo esta uma linguagem desenvolvida pela MS (Salvo erro?) até dou o benefício da dúvida em relação a isso estar certo ou não, mas todavia, sugiro que vás pela minha sugestão. Em última instancia, uma vez que não me dás ideia de conheceres o protocolo, sugiro que leias o RFC 792 que especifica o protocolo de ICMP, nomeadamente os ping requests e replies.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois também presumo que seja disso. Se tirares o "http://" deverá funcionar. Já que não é um hostname válido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim de repente, o que me salta à vista, é estares a colocar um endereço no formato http:// (um URI) ao invés de um endereço IP ou Hostname.

Olhando para a definição no MSDN:

When sending the request, you must specify the remote computer. You can do this by providing a host name string, an IP address in string format, or an IPAddress object.

Pois isso do http foi completa distração :/ Esquecime completamente que até no comando ping do windows não podemos por http xD Enfim...

Como não conheço a linguagem C# e sendo esta uma linguagem desenvolvida pela MS (Salvo erro?) até dou o benefício da dúvida em relação a isso estar certo ou não, mas todavia, sugiro que vás pela minha sugestão. Em última instancia, uma vez que não me dás ideia de conheceres o protocolo, sugiro que leias o RFC 792 que especifica o protocolo de ICMP, nomeadamente os ping requests e replies.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora