首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >网络接口速度

网络接口速度
EN

Stack Overflow用户
提问于 2012-10-18 22:33:54
回答 3查看 2.4K关注 0票数 1

我想要获取网络接口的名称、速度和MAC地址。

代码语言:javascript
运行
复制
    var searcher = new ManagementObjectSearcher { Scope = GetConnectedScope(target, "cimv2") };

        try
        {
           searcher.Query = new ObjectQuery("SELECT MACAddress, Speed, Name FROM Win32_NetworkAdapter");

            var nicList = new List<NetworkInterfaceModel>();
            foreach (var item in searcher.Get())
            {
                nicList.Add(new NetworkInterfaceModel
                {
                    NetworkInterfaceName = (string)item["Name"],
                    NetworkInterfaceSpeed = (double)(item["Speed"] != null ? (ulong) item["Speed"] : 0)/1000/1000,
                    MacAddress = (string)item["MACAddress"]
                });
            }

对于Windows7和Vista,它工作得很好,但对于XP和Windows Server2003,它没有达到这个速度。如何获得XP和Server 2003的速度?

EN

回答 3

Stack Overflow用户

发布于 2012-10-18 23:19:33

根据http://msdn.microsoft.com/en-us/library/windows/desktop/aa394216(v=vs.85).aspx的说法,Win32_NetworkAdapter在XP下不支持speed属性:

Windows Server2003、Windows XP、Windows2000和Windows NT4.0:此属性尚未实现。默认情况下,它返回空值。

相反,请使用具有相同属性的CIM_NetworkAdapter类。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa387931(v=vs.85).aspx

票数 1
EN

Stack Overflow用户

发布于 2015-11-13 02:08:05

代码语言:javascript
运行
复制
using System.Net;
foreach (NetworkInterface netInterface in NetworkInterface.GetAllNetworkInterfaces()) {
    Debug.WriteLine(netInterface.Name); // Name
    Debug.WriteLine(netInterface.Speed); // Speed
    Debug.WriteLine(netInterface.GetPhysicalAddress().ToString()); // MAC
}
票数 1
EN

Stack Overflow用户

发布于 2017-09-13 19:42:34

您可以使用windows cmd获取网络名称:

代码语言:javascript
运行
复制
Process p = new Process();
p.StartInfo.FileName = "netsh.exe";
p.StartInfo.Arguments = "wlan show interfaces";
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
string s = p.StandardOutput.ReadToEnd();
string s1 = s.Substring(s.IndexOf("SSID"));
s1 = s1.Substring(s1.IndexOf(":"));
s1 = s1.Substring(2, s1.IndexOf("\n")).Trim();
p.WaitForExit();

namelabel.Text = s1;

对于MAC地址:

代码语言:javascript
运行
复制
 IPAddress IP = IPAddress.Parse("192.168.1.1");
 byte[] macAddr = new byte[6];
 uint macAddrLen = (uint)macAddr.Length;
 UInt32 nRet = 0;
 uint nAddress = BitConverter.ToUInt32(IP.GetAddressBytes(), 0);
 nRet = SendARP(nAddress, 0, macAddr, ref macAddrLen);
 if (nRet == 0)
 {
     string[] sMacAddress = new string[(int)macAddrLen];

     for (int i = 0; i < macAddrLen; i++)
     {
         sMacAddress[i] = macAddr[i].ToString("x2");
         string macAddress += sMacAddress[i] + (i < macAddrLen - 1 ? ":" : "");

     }
 }

关于速度,你可以使用下面的代码:

代码语言:javascript
运行
复制
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.NetworkInformation;

首先添加一个timerInteval(您希望以多快的速度更改为新值)、一个NetworkInteface和一个计时器:

代码语言:javascript
运行
复制
private const double timerUpdate = 1000;
private NetworkInterface[] nicArr;
private Timer timer;

然后在启动时继续使用以下组件:

代码语言:javascript
运行
复制
public Form1()
    {
        InitializeComponent();
        InitializeNetworkInterface();
        InitializeTimer();
    }

组件:

代码语言:javascript
运行
复制
private void InitializeNetworkInterface()
{
    // Grab all local interfaces to this computer
    nicArr = NetworkInterface.GetAllNetworkInterfaces();

    // Add each interface name to the combo box
    for (int i = 0; i < nicArr.Length; i++)
        comboBox1.Items.Add(nicArr[i].Name); //you add here the interface types in a combobox and select from here WiFi, ethernet etc...

    // Change the initial selection to the first interface
    comboBox1.SelectedIndex = 0;
}
private void InitializeTimer()
{
     timer = new Timer();
     timer.Interval = (int)timerUpdate;
     timer.Tick += new EventHandler(timer_Tick);
     timer.Start();
 }

定时器滴答声

代码语言:javascript
运行
复制
void timer_Tick(object sender, EventArgs e)
{
    UpdateNetworkInterface();                
}

使用此void更新ping:

代码语言:javascript
运行
复制
public void UpdatePing()
{     
    try
    {
        Ping myPing = new Ping();
        PingReply reply = myPing.Send(textBox1.Text, 1000);
        if (reply != null)
        {
            label17.Text = reply.Status.ToString();
            label18.Text = reply.RoundtripTime.ToString();                    
        }
    }
    catch
    {
        label17.Text = "ERROR: You have Some TIMEOUT issue";
        label18.Text = "ERROR: You have Some TIMEOUT issue";                
    }
}

最后用这个来表示网络形式的速度:

代码语言:javascript
运行
复制
private void UpdateNetworkInterface()
{
    // Grab NetworkInterface object that describes the current interface
    NetworkInterface nic = nicArr[comboBox1.SelectedIndex];

    // Grab the stats for that interface
    IPv4InterfaceStatistics interfaceStats = nic.GetIPv4Statistics();

    // Calculate the speed of bytes going in and out
    // NOTE: we could use something faster and more reliable than Windows Forms Tiemr
    //       such as HighPerformanceTimer http://www.m0interactive.com/archives/2006/12/21/high_resolution_timer_in_net_2_0.html

    // Update the labels
    speedlbl.Text = nic.Speed.ToString();
    interfaceTypelbl.Text = nic.NetworkInterfaceType.ToString();            
    bytesReceivedlbl.Text = interfaceStats.BytesReceived.ToString();
    bytesSentlbl.Text = interfaceStats.BytesSent.ToString();

    int bytesSentSpeed = (int)(interfaceStats.BytesSent - double.Parse(label10.Text)) / 1024;
    int bytesReceivedSpeed = (int)(interfaceStats.BytesReceived - double.Parse(label11.Text)) / 1024;

    bytescomelbl.Text = bytesSentSpeed.ToString() + " KB/s";
    bytessentlbl.Text = bytesReceivedSpeed.ToString() + " KB/s";

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12957089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档