Program Tip

C #에서 ping 사용

programtip 2020. 10. 6. 18:59
반응형

C #에서 ping 사용


Windows가있는 원격 시스템을 Ping하면 응답이 없다고 표시되지만 C #으로 Ping하면 성공이라고 표시됩니다. Windows가 정확하고 장치가 연결되지 않았습니다. Windows가 아닌데도 내 코드가 성공적으로 ping 할 수있는 이유는 무엇입니까?

내 코드는 다음과 같습니다.

Ping p1 = new Ping();
PingReply PR = p1.Send("192.168.2.18");
// check when the ping is not success
while (!PR.Status.ToString().Equals("Success"))
{
    Console.WriteLine(PR.Status.ToString());
    PR = p1.Send("192.168.2.18");
}
// check after the ping is n success
while (PR.Status.ToString().Equals("Success"))
{
    Console.WriteLine(PR.Status.ToString());
    PR = p1.Send("192.168.2.18");
}

using System.Net.NetworkInformation;    

public static bool PingHost(string nameOrAddress)
{
    bool pingable = false;
    Ping pinger = null;

    try
    {
        pinger = new Ping();
        PingReply reply = pinger.Send(nameOrAddress);
        pingable = reply.Status == IPStatus.Success;
    }
    catch (PingException)
    {
        // Discard PingExceptions and return false;
    }
    finally
    {
        if (pinger != null)
        {
            pinger.Dispose();
        }
    }

    return pingable;
}

C #에서 ping을 사용하는 방법 Ping.Send(System.Net.IPAddress)은 제공된 유효한 IP 주소 또는 URL에 대한 ping 요청을 실행하고 그에 대한 20 바이트의 헤더를 포함하는 ICMP (Internet Control Message Protocol) 패킷 이라는 응답을받습니다. ping 요청을 수신 한 ping 된 서버의 응답 데이터를 포함하고 .Net 프레임 워크 System.Net.NetworkInformation네임 스페이스에는 응답 PingReply을 변환하고 다음 ICMP과 같은 ping 된 서버 네트워킹에 대한 유용한 정보를 제공 하도록 설계된 속성 이있는 Class라는 클래스가 포함됩니다.

  • IPStatus : ICMP (Internet Control Message Protocol) 에코 응답을 보내는 호스트의 주소를 가져옵니다.
  • IPAddress : ICMP (Internet Control Message Protocol) 에코 요청을 보내고 해당 ICMP 에코 응답 메시지를받는 데 걸리는 시간 (밀리 초)을 가져옵니다.
  • RoundtripTime (System.Int64) : ICMP (Internet Control Message Protocol) 에코 요청에 대한 응답을 전송하는 데 사용되는 옵션을 가져옵니다.
  • PingOptions (System.Byte []) : ICMP (Internet Control Message Protocol) 에코 응답 메시지에서 수신 한 데이터의 버퍼를 가져옵니다.

다음은 WinForms유효한 IP 주소를 제공 textBox1하고를 클릭하여 C #에서 ping이 작동하는 방식을 보여주는 간단한 예제 button1입니다 . IP 또는 URL 주소를 저장할 로컬 변수 문자열 Ping classPingReply, 의 인스턴스를 생성 한 다음 PingReply생성 로컬 변수를 ping Send 메서드에 할당 한 다음 응답 상태를 속성 IPAddress.Success상태와 비교하여 요청이 성공했는지 검사 한 다음 PingReply로컬 변수에서 사용자에게 표시해야하는 정보를 추출 합니다. 전술 한 바와:

using System;
using System.Net.NetworkInformation;
using System.Windows.Forms;

namespace PingTest1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Ping p = new Ping();
            PingReply r;
            string s;
            s = textBox1.Text;
            r = p.Send(s);

            if (r.Status == IPStatus.Success)
            {
                lblResult.Text = "Ping to " + s.ToString() + "[" + r.Address.ToString() + "]" + " Successful"
                   + " Response delay = " + r.RoundtripTime.ToString() + " ms" + "\n";
            }
        }

        private void textBox1_Validated(object sender, EventArgs e)
        {
            if (string.IsNullOrWhiteSpace(textBox1.Text) || textBox1.Text == "")
            {
                MessageBox.Show("Please use valid IP or web address!!");
            }
        }
    }
}

private void button26_Click(object sender, EventArgs e)
{
    System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
    proc.FileName = @"C:\windows\system32\cmd.exe";
    proc.Arguments = "/c ping -t " + tx1.Text + " ";
    System.Diagnostics.Process.Start(proc);
    tx1.Focus();
}

private void button27_Click(object sender, EventArgs e)
{
    System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
    proc.FileName = @"C:\windows\system32\cmd.exe";
    proc.Arguments = "/c ping  " + tx2.Text + " ";
    System.Diagnostics.Process.Start(proc);
    tx2.Focus();
}

참고 URL : https://stackoverflow.com/questions/11800958/using-ping-in-c-sharp

반응형