实例介绍
【实例简介】 自己厂里,内部使用的小工具。解决一部分人不知道怎么获取本机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小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论