此语法可用于 ping IP 范围吗?

发布于 2024-12-27 12:20:45 字数 1645 浏览 3 评论 0原文

我正在尝试创建一个代码,允许我对 IP 地址范围进行 ping 操作。

我收到 2 个输入。一个是起始地址范围,另一个是我想要 ping 的 IP 范围的结束地址。然后我分割一个字符串并将每个字符串的值分配给将更改的变量(a、b、c、d、aa、bb、cc、dd)。

这在逻辑上正确吗?

这是我的代码:

public PingIPRange()
{
    InitializeComponent();

    txtFrom.Text = "250.250.250.250";
    txtTo.Text = "254.254.224.254";

    string[] from = txtFrom.Text.Split('.');
    string[] to = txtTo.Text.Split('.');

    int from1 = a = int.Parse(from[0]);
    int from2 = b = int.Parse(from[1]);
    int from3 = c = int.Parse(from[2]);
    int from4 = d = int.Parse(from[3]);

    int to1 = aa = int.Parse(to[0]);
    int to2 = bb = int.Parse(to[1]);
    int to3 = cc = int.Parse(to[2]);
    int to4 = dd = int.Parse(to[3]);

    tmrPingInterval.Tick += new EventHandler(tmrPingInterval_Tick);
}

void tmrPingInterval_Tick(object sender, EventArgs e)
{
    if (d <= max)
    {
        if (d == max || d == dd)
        {
            c++;
            d = 0;
        }
        if (c == max || c == cc)
        {
            d++;
            c = 0;
        }
        if (b == max || b == bb)
        {
            c++;
            b = 0;
        }
        if (a == max || a == aa)
        {
            b++;
            a = 0;
        }

        if ((a == max && b == max && c == max && d == max) || (a == aa && b == bb && c == cc && d == dd))
        {
            tmrPingInterval.Stop();
        }

        txtDisplay.Text += a + "." + b + "." + c + "." + d + Environment.NewLine;

        d++;
    }

    txtDisplay.SelectionStart = txtDisplay.Text.Length;
    txtDisplay.ScrollToCaret();
}

I'm trying to create a code which will allow me to ping range of IP addresses.

I'm getting 2 inputs. One is address to start range from and the other is the end of the IP range I want to ping. Then I'm splitting a string and assigning the values of each to variables that will change (a, b, c, d, aa, bb, cc, dd).

Is this logically correct?

This is my code:

public PingIPRange()
{
    InitializeComponent();

    txtFrom.Text = "250.250.250.250";
    txtTo.Text = "254.254.224.254";

    string[] from = txtFrom.Text.Split('.');
    string[] to = txtTo.Text.Split('.');

    int from1 = a = int.Parse(from[0]);
    int from2 = b = int.Parse(from[1]);
    int from3 = c = int.Parse(from[2]);
    int from4 = d = int.Parse(from[3]);

    int to1 = aa = int.Parse(to[0]);
    int to2 = bb = int.Parse(to[1]);
    int to3 = cc = int.Parse(to[2]);
    int to4 = dd = int.Parse(to[3]);

    tmrPingInterval.Tick += new EventHandler(tmrPingInterval_Tick);
}

void tmrPingInterval_Tick(object sender, EventArgs e)
{
    if (d <= max)
    {
        if (d == max || d == dd)
        {
            c++;
            d = 0;
        }
        if (c == max || c == cc)
        {
            d++;
            c = 0;
        }
        if (b == max || b == bb)
        {
            c++;
            b = 0;
        }
        if (a == max || a == aa)
        {
            b++;
            a = 0;
        }

        if ((a == max && b == max && c == max && d == max) || (a == aa && b == bb && c == cc && d == dd))
        {
            tmrPingInterval.Stop();
        }

        txtDisplay.Text += a + "." + b + "." + c + "." + d + Environment.NewLine;

        d++;
    }

    txtDisplay.SelectionStart = txtDisplay.Text.Length;
    txtDisplay.ScrollToCaret();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

仙女 2025-01-03 12:20:45

你把事情想得太复杂了!我会用这样的东西来保持简单:

static uint str2ip(string ip)
{
    string[] numbers = ip.Split('.');

    uint x1 = (uint)(Convert.ToByte(numbers[0]) << 24);
    uint x2 = (uint)(Convert.ToByte(numbers[1]) << 16);
    uint x3 = (uint)(Convert.ToByte(numbers[2]) << 8);
    uint x4 = (uint)(Convert.ToByte(numbers[3]));

    return x1 + x2 + x3 + x4;
}

static string ip2str(uint ip)
{
    string s1 = ((ip & 0xff000000) >> 24).ToString() + "."; 
    string s2 = ((ip & 0x00ff0000) >> 16).ToString() + ".";
    string s3 = ((ip & 0x0000ff00) >> 8).ToString() + "."; 
    string s4 = (ip & 0x000000ff).ToString();

    string ip2 = s1 + s2 + s3 + s4;
    return ip2;
}

是一个例子:

static void Main(string[] args)
{
    uint startIP = str2ip("250.255.255.100");
    uint endIP = str2ip("255.0.1.255");

    for(uint currentIP = startIP; currentIP <= endIP; currentIP++) {
        string thisIP = ip2str(currentIP);
        Console.WriteLine(thisIP);
    }

    Console.ReadKey();
}

You're overcomplicating it! I'd keep it simple with something like this:

static uint str2ip(string ip)
{
    string[] numbers = ip.Split('.');

    uint x1 = (uint)(Convert.ToByte(numbers[0]) << 24);
    uint x2 = (uint)(Convert.ToByte(numbers[1]) << 16);
    uint x3 = (uint)(Convert.ToByte(numbers[2]) << 8);
    uint x4 = (uint)(Convert.ToByte(numbers[3]));

    return x1 + x2 + x3 + x4;
}

and

static string ip2str(uint ip)
{
    string s1 = ((ip & 0xff000000) >> 24).ToString() + "."; 
    string s2 = ((ip & 0x00ff0000) >> 16).ToString() + ".";
    string s3 = ((ip & 0x0000ff00) >> 8).ToString() + "."; 
    string s4 = (ip & 0x000000ff).ToString();

    string ip2 = s1 + s2 + s3 + s4;
    return ip2;
}

Here's an example:

static void Main(string[] args)
{
    uint startIP = str2ip("250.255.255.100");
    uint endIP = str2ip("255.0.1.255");

    for(uint currentIP = startIP; currentIP <= endIP; currentIP++) {
        string thisIP = ip2str(currentIP);
        Console.WriteLine(thisIP);
    }

    Console.ReadKey();
}
寂寞花火° 2025-01-03 12:20:45

我建议您使用类 IPAddress
您可以使用此代码迭代 IP 地址:

IPAddress ipAddress = IPAddress.Parse(txtFrom.Text);

byte[] bytes = ipAddress.GetAddressBytes();
if (++bytes[3] == 0)
  if (++bytes[2] == 0)
    if (++bytes[1] == 0)
        ++bytes[0];

IPAddress nextIPAddress = new IPAddress(bytes);

来源:IP 地址增量问题

I recommend you to use a class IPAddress.
Than you can iterate through IP addresses using this code:

IPAddress ipAddress = IPAddress.Parse(txtFrom.Text);

byte[] bytes = ipAddress.GetAddressBytes();
if (++bytes[3] == 0)
  if (++bytes[2] == 0)
    if (++bytes[1] == 0)
        ++bytes[0];

IPAddress nextIPAddress = new IPAddress(bytes);

Source: ip address increment problem

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文