实例介绍
【实例简介】 自己厂里,内部使用的小工具。解决一部分人不知道怎么获取本机IP,开启远程桌面,电脑信息等情况。
【实例截图】
【核心代码】
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Management;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Threading;
using System.Windows.Forms;
namespace IP查询
{
public partial class FrmMain : Form
{
internal static List<int> openedPorts = new List<int>();
//已扫描端口数目
internal static int scannedCount = 0;
internal static int runningThreadCount = 0;
static int startPort = 1;
static int endPort = 500;
static int maxThread = 100;
public FrmMain()
{
InitializeComponent();
toolStripStatusLabel1.Text = "卓力电器集团 开发: yya";
}
private void BtnGetIP_Click(object sender, EventArgs e)
{
//IterationRemoveItem(this.LstIP);//移除所有项
LstIP.Items.Clear();//清除所有
string name = Dns.GetHostName();
IPAddress[] ipadrlist = Dns.GetHostAddresses(name);
// LstIP.DataSource = ipadrlist;
LstIP.Items.Add("本机所有IP:");
foreach (IPAddress item in ipadrlist)
{
if (item.AddressFamily == AddressFamily.InterNetwork)//只取IP V4
LstIP.Items.Add(" " item);
}
LstIP.Items.Add("MAC地址:");
foreach (var item in GetMacByWMI())
{
LstIP.Items.Add(" " item.ToString());
}
LstIP.Items.Add("计算机名:" name);
LstIP.Items.Add("当前登录用户:" System.Environment.UserName);
LstIP.Items.Add("DNS:");
foreach (var item in GetDnsAddresses())
{
if (item.AddressFamily == AddressFamily.InterNetwork)
{
LstIP.Items.Add(" " item.ToString());
//break;
}
}
LstIP.Items.Add("当前登录的域或工作组:" System.Environment.UserDomainName);
GetOSystem aa= new GetOSystem();
LstIP.Items.Add("当前操作系统: " aa.GetName );
LstIP.Items.Add("系统位数:" Distinguish64or32System());
//LstIP.Items.Add("当前登录的域或工作组:" new GetOSystem());
}
private string Distinguish64or32System()
{
try
{
string addressWidth = String.Empty;
ConnectionOptions mConnOption = new ConnectionOptions();
ManagementScope mMs = new ManagementScope("//localhost", mConnOption);
ObjectQuery mQuery = new ObjectQuery("select AddressWidth from Win32_Processor");
ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(mMs, mQuery);
ManagementObjectCollection mObjectCollection = mSearcher.Get();
foreach (ManagementObject mObject in mObjectCollection)
{
addressWidth = mObject["AddressWidth"].ToString();
}
return addressWidth;
}
catch (Exception ex)
{
return String.Empty;
}
}
public List<string> GetMacByWMI()
{
List<string> macs = new List<string>();
try
{
string mac = "";
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach (ManagementObject mo in moc)
{
if ((bool)mo["IPEnabled"])
{
mac = mo["MacAddress"].ToString();
macs.Add(mac);
}
}
moc = null;
mc = null;
}
catch
{
}
return macs;
}
private void timer1_Tick(object sender, EventArgs e)
{
toolStripStatusLabel2.Text ="日期:" DateTime.Now.ToLongDateString() " " DateTime.Now.ToLongTimeString();
}
#region 获取DNS
public IPAddressCollection GetDnsAddresses()
{
NetworkInterface[] adapters = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface adapter in adapters)
{
IPInterfaceProperties adapterProperties = adapter.GetIPProperties();
return adapterProperties.DnsAddresses;
}
return null;
}
#endregion
private void LstIP_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.C && e.Control)
{
Clipboard.SetDataObject(LstIP.SelectedItem.ToString()); //把数据复制到粘贴板上
}
}
private void IterationRemoveItem(ListBox listbox)
{
for (int i = 0; i < listbox.Items.Count; i )
{
// this.LstIP.Items.RemoveAt(i);
listbox.Items.RemoveAt(i);
}
for (int j = 0; j < listbox.Items.Count; j )
{
IterationRemoveItem(listbox);
}
}
private void btnOpenRemote_Click(object sender, EventArgs e)
{
string strcmd = "@echo off\r\n";
strcmd = "reg add \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\" /v fDenyTSConnections /t REG_DWORD /d 0 /f";
string stroutcmd = string.Empty;
Cmd.RunCmd(strcmd, out stroutcmd);
if (stroutcmd.Contains("操作成功"))
MessageBox.Show("操作成功", "提示");
else
MessageBox.Show("操作失败!", "提示");
}
private void btnCloseRemote_Click(object sender, EventArgs e)
{
string strcmd = "@echo off\r\n";
strcmd = "reg add \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\" /v fDenyTSConnections /t REG_DWORD /d 1 /f";
string stroutcmd = string.Empty;
Cmd.RunCmd(strcmd, out stroutcmd);
if (stroutcmd.Contains("操作成功"))
MessageBox.Show("操作成功", "提示");
else
MessageBox.Show("操作失败!", "提示");
}
private void btnShutDown_Click(object sender, EventArgs e)
{
//if(string.IsNullOrEmpty(TxtComputer.Text))
//{
// MessageBox.Show("请输入要关机的计算机名称或IP", "提示");
// return;
//}
string strcmd = "@echo on\r\n ";
strcmd = "shutdown -s -t 1001";
string stroutcmd = string.Empty;
Cmd.RunCmd(strcmd, out stroutcmd);
if (stroutcmd.Contains("操作成功"))
MessageBox.Show("操作成功", "提示");
else
MessageBox.Show("操作失败!", "提示");
}
private void BtnGetHandInfo_Click(object sender, EventArgs e)
{
HardwareHandler hard = new HardwareHandler();
hard.CpuInfo();
lstHand.Items.Add("CPU信息:");
foreach (var item in hard.CpuInfo())
{
lstHand.Items.Add(" " item);
}
lstHand.Items.Add("主板信息:");
foreach (var item in hard.MainBoardInfo())
{
lstHand.Items.Add(" " item);
}
lstHand.Items.Add("硬盘信息:");
foreach (var item in hard.DiskDriveInfo())
{
lstHand.Items.Add(" " item);
}
//lstHand.Items.Add("网络信息:");
//foreach (var item in hard.NetworkInfo())
//{
// lstHand.Items.Add(" " item);
//}
lstHand.Items.Add("操作系统信息:");
foreach (var item in hard.OsInfo())
{
lstHand.Items.Add(" " item);
}
lstHand.Items.Add("内存信息:");
foreach (var item in hard.GetPhisicalMemory())
{
lstHand.Items.Add(" " item);
}
}
private void btnScanPort_Click(object sender, EventArgs e)
{
//int runningThreadCount = 0;
//int maxThread = 100;
//int scannedCount = 0;
string host = TXTIP.Text.Trim();
int startPort = int.Parse(TXTStartPort.Text.Trim());
int endPort = int.Parse(TXTEndPort.Text.Trim());
for (int port = startPort; port < endPort; port )
{
Scanner scanner = new Scanner(host, port);
Thread thread = new Thread(new ThreadStart(scanner.Scan));
thread.Name = port.ToString();
thread.IsBackground = true;
thread.Start();
runningThreadCount ;
Thread.Sleep(10);
//循环,直到某个线程工作完毕才启动另一新线程,也可以叫做推拉窗技术
while (runningThreadCount >= maxThread) ;
}
//空循环,直到所有端口扫描完毕
while (scannedCount 1 < (endPort - startPort)) ;
foreach (int port in openedPorts)
{
LstPort.Items.Add(port.ToString().PadLeft(6));
}
}
}
/// <summary>
/// 取出的 win10 系统为win8的。奇怪 ,已修改
/// </summary>
public class GetOSystem
{
private const string Windows2000 = "5.0";
private const string WindowsXP = "5.1";
private const string Windows2003 = "5.2";
private const string Windows2008 = "6.0";
private const string Windows7 = "6.1";
private const string Windows8OrWindows81 = "6.2";
private const string Windows10 = "10.0";
private string OSystemName;
public void setOSystemName(string oSystemName)
{
this.OSystemName = oSystemName;
}
public string GetName { get; set; }
public GetOSystem()
{
string ss = string.Empty;
switch (System.Environment.OSVersion.Version.Major "." System.Environment.OSVersion.Version.Minor)
{
case Windows2000:
setOSystemName("Windows2000");
GetName = "Windows 2000";
break;
case WindowsXP:
setOSystemName("WindowsXP");
GetName = "Windows XP";
break;
case Windows2003:
setOSystemName("Windows2003");
GetName = "Windows 2003";
break;
case Windows2008:
setOSystemName("Windows2008");
GetName = "Windows 2008";
break;
case Windows7:
setOSystemName("Windows7");
GetName = "Windows 7";
break;
case Windows8OrWindows81:
setOSystemName("Windows8.OrWindows8.1");
GetName = "Windows 8 Or Windows 8.1";
break;
case Windows10:
setOSystemName("Windows10");
GetName = "Windows 10";
break;
default:
setOSystemName("未知操作系统");
GetName = "未知操作系统 ";
break;
}
//Console.WriteLine(OSystemName);
}
}
public class Cmd
{
private static string CmdPath = @"C:\Windows\System32\cmd.exe";
/// <summary>
/// 执行cmd命令
/// 多命令请使用批处理命令连接符:
/// <![CDATA[
/// &:同时执行两个命令
/// |:将上一个命令的输出,作为下一个命令的输入
/// &&:当&&前的命令成功时,才执行&&后的命令
/// ||:当||前的命令失败时,才执行||后的命令]]>
/// 其他请百度
/// </summary>
/// <param name="cmd"></param>
/// <param name="output"></param>
public static void RunCmd(string cmd, out string output)
{
cmd = cmd.Trim().TrimEnd('&') "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时,会处于假死状态
using (Process p = new Process())
{
p.StartInfo.FileName = CmdPath;
p.StartInfo.UseShellExecute = false; //是否使用操作系统shell启动
p.StartInfo.RedirectStandardInput = true; //接受来自调用程序的输入信息
p.StartInfo.RedirectStandardOutput = true; //由调用程序获取输出信息
p.StartInfo.RedirectStandardError = true; //重定向标准错误输出
p.StartInfo.CreateNoWindow = true; //不显示程序窗口
p.Start();//启动程序
//向cmd窗口写入命令
p.StandardInput.WriteLine(cmd);
p.StandardInput.AutoFlush = true;
//获取cmd窗口的输出信息
output = p.StandardOutput.ReadToEnd();
p.WaitForExit();//等待程序执行完退出进程
p.Close();
}
}
}
class Scanner
{
string m_host;
int m_port;
public Scanner(string host, int port)
{
m_host = host;
m_port = port;
}
public void Scan()
{
TcpClient tc = new TcpClient();
tc.SendTimeout = tc.ReceiveTimeout = 2000;
try
{
tc.Connect(m_host, m_port);
if (tc.Connected)
{
Console.WriteLine("Port {0} is Open", m_port.ToString().PadRight(6));
FrmMain.openedPorts.Add(m_port);
}
}
catch
{
Console.WriteLine("Port {0} is Closed", m_port.ToString().PadRight(6));
}
finally
{
tc.Close();
tc = null;
FrmMain.scannedCount ;
FrmMain.runningThreadCount--;
}
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论