C#创建一个WPF应用程序,用多任务来扫描一个网段内的计算机,根据计算机的IP地址获取其主机域名。

C#创建一个WPF应用程序,用多任务来扫描一个网段内的计算机,根据计算机的IP地址获取其主机域名。


在这里插入图片描述

在这里插入图片描述
MainWindow.xaml

<Window x:Class="shiyan1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:shiyan1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

    <Grid Margin="0,0,99.6,0">

        <StackPanel HorizontalAlignment="Left" Height="290" VerticalAlignment="Top" Width="539" Margin="93,40,0,0">


            <GroupBox Header="扫描的IP地址范围" Height="83" Width="539">

                <DockPanel HorizontalAlignment="Left" Height="30" LastChildFill="False" Margin="10,10,0,0" VerticalAlignment="Top" Width="485" >
                    <Label Content="地址前端:" Height="24" VerticalAlignment="Top" Width="75"/>
                    <TextBox Name="qianduan" Height="14" TextWrapping="Wrap" Text="192.168.1." VerticalAlignment="Top" Width="73"  Margin="0,6,0,0"/>
                    <Label Content="起始值:" Height="30" VerticalAlignment="Top" Margin="15,0,0,0" Width="64"/>
                    <TextBox Name="qishi"  Height="14" TextWrapping="Wrap" Text="5" VerticalAlignment="Top" Width="55" Margin="0,6,0,0" />
                    <Label Content="终止值:" Height="30" VerticalAlignment="Top" Width="56"/>
                    <TextBox Name="zhongzhi" Height="14" TextWrapping="Wrap" Text="10" VerticalAlignment="Top" Width="55" Margin="0,6,0,0" />
                    <Button Content="开始扫描" Name="btn1" Height="18" VerticalAlignment="Top" Width="58" Margin="15,6,0,0" RenderTransformOrigin="0.502,0.5" Click="Btn1_Click"/>


                </DockPanel>

            </GroupBox>

            <Label  Margin="10,5,10.2,0" Background="Yellow" Foreground="Black" Content="IP地址有误,请更正" HorizontalContentAlignment="Center"
                    Grid.Row="1" Width="519" Name="error"/>
            <GroupBox Header="扫描信息" Height="167" Margin="0,10,0.2,0">
                <ListBox HorizontalAlignment="Left" Height="129" VerticalAlignment="Top" Width="519" Margin="0,10,0,0" Name="listbox"/>
                    
            </GroupBox>


        </StackPanel>

    </Grid>
    <Window.Resources>
        <Style TargetType="TextBox">
            <EventSetter Event="TextChanged" Handler="TextBox_TextChanged"/>
        </Style>
    </Window.Resources>
</Window>

MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace shiyan1
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            error.Visibility = System.Windows.Visibility.Collapsed;
        }

       

        private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            String s1 = qianduan.Text+qishi.Text;
            IPAddress ip1, ip2;
            if(IPAddress.TryParse(s1,out ip1)==false||IPAddress.TryParse(s1,out ip2))
            {
                error.Visibility = System.Windows.Visibility.Visible;
                btn1.IsEnabled = false;
                return;
            }
            else
            {
                btn1.IsEnabled = true;
                error.Visibility = System.Windows.Visibility.Collapsed;
            }
        }

        private void Btn1_Click(object sender, RoutedEventArgs e)
        {
            int start = int.Parse(qishi.Text);
            int end = int.Parse(zhongzhi.Text);
            if(start>end)
            {
                MessageBox.Show("终止值大于起始值");

            }
            listbox.Items.Clear();
            for(int i = start; i <= end; i++)
            {
                IPAddress ip = IPAddress.Parse(qianduan.Text + i);
                Task.Run(() => Scan(ip));
            }
        }

        private void Scan(IPAddress ip)
        {
            Stopwatch stopwatch = Stopwatch.StartNew();
            string host = "";
            try
            {
                host = Dns.GetHostEntry(ip).HostName;
            }
            catch
            {
                host = "(不在线)";
            }
            stopwatch.Stop();
            listbox.Dispatcher.Invoke(() => listbox.Items.Add(
                string.Format("扫描地址:{0},扫描用时:{1}毫秒,主机DNS名称:{2}", ip, stopwatch.ElapsedMilliseconds, host))
            );
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43399648/article/details/106566465