近几年工作经常使用RFID识读器,智能家居网关,温湿度传感器、串口服务器、视频编码器等,一般是有串口和网口,由于现场原因一般较少使用串口,大多使用网口。连接方法是IP地址和端口,有的设备带搜索软件,有的就不带。经常测试环境和现场来回用,难免记混。同时使用网上的一些端口扫描工具,发现有一个问题,就是在进行扫描的时候,不怎么好用,比如,扫描器一般都是带端口扫描的,但是,我仅仅只用扫描设备在不在线,不用扫描端口,但是有一些设备是只要扫描端口,这个怎么更方便更好用呢?
同时在扫描成功之后,需要通过TCP连接到设备,发数据,看数据能不能正常相应,或者设备状态对不对,这是不是又要单独开另外一个软件?使用起来,比较繁琐,因此就根据自己的需要制作了一个小工具,用来扫描IP和端口。
扫描速度一定要快,成功和不成功区分要明显,好了,先上图:
一、主要IP扫描方法:
(1)、IP地址匹配,看IP设置是否正确
//匹配正确的IP地址
Regex rgx = new Regex(@"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$");
if (rgx.IsMatch(IPStarttextBox.Text) && rgx.IsMatch(IPStoptextBox.Text))//匹配正确IP
{
if (scan_type == 1)
{
int startIp = Int32.Parse(IPStarttextBox.Text.Split('.')[3]);
int endIp = Int32.Parse(IPStoptextBox.Text.Split('.')[3]);
progressBar.Minimum = startIp;
progressBar.Maximum = endIp;
}
else
{
if (PortStarttextBox.Text == "")
{
MessageBox.Show("请输入端口号!");
}
else
{
portStart = Int32.Parse(PortStarttextBox.Text);
portEnd = Int32.Parse(PortEndtextBox.Text);
progressBar.Minimum = portStart;
progressBar.Maximum = portEnd;
}
if (portEnd < portStart)
{
MessageBox.Show("请填写正确端口范围");
return;
}
}
}
else
{
MessageBox.Show("请填写正确IP");
return;
}
(2)、获取主机名
public static string GetHostEntry(objectip)
{string hostname = "-";try{
IPHostEntry host=Dns.GetHostEntry(ip.ToString());
hostname=host.HostName;
}catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}returnhostname;
}
(3)、获取MAC地址
[DllImport("ws2_32.dll")]private static extern int inet_addr(stringcp);
[DllImport("IPHLPAPI.dll")]private static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 pMacAddr, refInt32 PhyAddrLen);private string GetMacAddress(string hostip)//获取远程IP(不能跨网段)的MAC地址
{string Mac = "";try{