远程终端IP地址查询助手

最近配置网桥,如果忘了网桥的地址,是一件很麻烦的事情。总是要试每个网桥的地址。想着开发一个查询IP助手,可以省很多的事,就试了试了试网络编程和程序打包的方法,花了一天时间做出来一个IP查询助手,速度不是很快,但也算时大大提高了效率。总结一下开发过程。

首先做了一个很low的界面,C#也做不出多么漂亮的界面。然后配上学校的logo,看上去高大上一些。

凑合看吧,这个不重要,能用就OK了。

程序很简单,直接上程序吧。会C#开发语言的一眼就能看明白,就不细细说整个过程了。前前后后试了3种网络连接方式,收益匪浅。

1.就是TCP连接方式,最常用的方式。

 
TcpClient tcpclient;  
tcpclient=new TcpClient();  
tcpclient.Connect(ipadress,port);
if(tcpclient.Connented){}  

2.比较复杂一些,没用过,觉得高大上了。

string server = textBox1.Text;
Socket socket = null;//实例化Socket对象,并初始化 
IPHostEntry iphostentry = null;//实例化IPHostEntry对象,并初始化 
iphostentry = Dns.GetHostEntry(server);//获得主机信息</span>  

foreach(IPAddress addressin iphostentry.AddressList) 
{
    //使用指定的IP地址和端口号实例化IPEndPoint对象 
    IPEndPoint IPEPoint = new IPEndPoint(address, port);
    //使用Socket的构造函数实例化一个Socket对象,以便用来连接远程主机
     Socket newSocket = new Socket(IPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
     newSocket.Connect(IPEPoint);</span>  
    if(newSocket.Connected){}
}

这两种方法不可以快速查找,太慢了,还是ping快一些。

还用到的是IP地址的分割,分个提取,这个还是比较有用的,以后可以用于字符串的分割。

string result="":
string IPstr="172.0.0.1";
string [] IPstrarr=IPstr.Split('.');
for(int i=0;i<IPstrarr.Length;i++)
{
     result+=IPstrarr[i].Tostring()+" ";
}
result=result.Trim();

下面直接上主程序吧。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Net.NetworkInformation;
namespace IP地址查询软件
{
    public partial class Form1 : Form
    {
        IPAddress ipaddress;
        TcpClient tcpClient;
        Ping pingSender = new Ping();
        public Form1()
        {
           InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string IPstr;
            string[] IPstrarr;
            string result="";
            string _ComputName = System.Net.Dns.GetHostName();
            System.Net.IPAddress[] _IPList = Dns.GetHostAddresses(_ComputName);
            for (int i = 0; i != _IPList.Length; i++)
            {
                if (_IPList[i].AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                {
                    textBox1.AppendText(_IPList[i].ToString());

                }
            }
            IPstr = _IPList[_IPList.Length-1].ToString();
            //IPstr = textBox1.Text;
            //textBox1.AppendText(IPstr);
            IPstrarr = IPstr.Split('.');
            for (int j = 0; j < IPstrarr.Length; j++)
            {
                result += IPstrarr[j].ToString();
            }
            //textBox1.AppendText(result);
            int d;
            int d1 = int.Parse(IPstrarr[3]);
            int a = int.Parse(IPstrarr[0]);
            int b = int.Parse(IPstrarr[1]);
            int c = int.Parse(IPstrarr[2]);
            //string d1;
            for (;a<255;a++)
            {
                for(;b<255;b++)
                {
                    for(;c<255;c++)
                    {
                       for(d=0;d<255;d++)
                        {
                            //d1 = Convert.ToString(d);
                            textBox2.AppendText(a + ".");
                            textBox2.AppendText(b + ".");
                            textBox2.AppendText(c + "." + d);
                            //textBox2.AppendText(d1);
                            //textBox3.AppendText("" + Convert.ToString(Port));
                            tcpClient = new TcpClient();
                            ipaddress = IPAddress.Parse(textBox2.Text);
                            try
                            {
                                //tcpClient.Connect(ipaddress, Port);
                                PingReply reply = pingSender.Send(ipaddress, 1);
                                if (reply.Status == IPStatus.Success)
                                {
                                    string ipaddress1 = Convert.ToString(ipaddress);
                                    if(d!=d1)
                                    {
                                        textBox3.AppendText(ipaddress1);
                                        tcpClient.Close();
                                        button1.Enabled = false;
                                        button1.Text = "查询完成";
                                        break;
                                    }
                                    
                                    textBox2.Clear();
                                    
                                }
                                else
                                {
                                    textBox2.Clear();
                                    //textBox3.Clear();
                                }

                            }
                            catch
                            {
                                textBox2.Clear();
                                //textBox3.Clear();
                            }
                            if (!button1.Enabled)
                            {
                                break;
                            }
                        }
                        if (!button1.Enabled)
                        {
                            break;
                        }

                    }
                    if (!button1.Enabled)
                    {
                        break;
                    }
                }
                if (!button1.Enabled)
                {
                    break;
                }
            }
        }
    }
}


下面主要说一下程序打包发布过程,Qt中说了Qt打包发布的过程,不过方法还是大大不同的。有兴趣的可以看看。
http://blog.csdn.net/spw_1201/article/details/62418691

如果你的VS没有Visual Studio Installer,先去下载安装一个,贴上地址。安装过程,看不懂的多看几遍就会了。

https://marketplace.visualstudio.com/items?itemName=VisualStudioProductTeam.MicrosoftVisualStudio2015InstallerProjects

1、新建一个Windows窗体应用程序,例如项目名为IP查询助手。新建的时候不要忘了创建解决方案。

2、在monitor解决方案上“右击”—— “添加”——“新建项目”,选择“其他类型项目”——“安装和部署”——“安装项目”,并命名为“IP查询助手”,

确定后显示如下图所示

3、添加必须文件: 在'应用程序文件夹'上右键,添加应用程序必须的配置文件(如果有的话),以及图标(桌面显示的图标,卸载程序的图标...).还需要添加一个系统的exe文件msiexec.exe(一般在c:\WINNT\System32目录下),用于卸载程序.

(1)在左边的“应用程序文件夹”上右击“添加”——“项目输出”,选择monitor项目

(2)在左边的“应用程序文件夹”上右击“添加”——“文件”,选择“c:"windows"system32"msiexec.exe”文件。

(3)在左边的“应用程序文件夹”上右击“添加”——“文件”,然后选择几个*.ico的图标文件

完后显示如下

4、创建快捷方式

(1)”程序菜单快捷方式“,命名为IP助手,并在其的属性栏中为其“Icon”选择刚才导入的图标。并将其拖动到“用户的”程序”菜单”文件下。

(2)桌面快捷方式:步骤同1。将其拖动到“用户桌面”下

(3)卸载快捷方式:在msiexec.exe上右击“创建msiexec.exe 的快捷方式”,并命名为“卸载Ip”。将其拖动到“用户的”程序”菜单”文件下,当然也可放在桌面。

查看IP查询助手部署项目属性,

属性值中有“{4EA38E9B-C4BF-4897-B095-E30160A27245}”类似字样,选中它“复制”。

再次点击你的卸载快捷方式名称,“卸载monitor”,再到右下角属性栏中,有一个叫Arguments的属性栏,在属性栏中首先填入“/x”后加一个空格,再“粘贴”,将ProductCode的属性值COPY至此。

5、打包.net framework

(可以默认)选择IP查询助手项目的属性,在对话框中选择“系统必备”,然后在弹出的对话框中选择“从组件供应商网站下载必备组件”,确定。

6、生成

在IP查询助手项目上右击选择“生成”,则打包成功,将在你的解决方案文件夹生成一个IP查询助手的文件夹,安装文件就在此目录下。


最后生成以后到Debug中找到exe文件就可以安装了,也可以像QQ一样拷贝给别人安装,装一波。

生成的快捷方式,是不是高大上。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章