Hier gibt es einige gute Antworten, ich wollte nur noch ein paar Optionen hinzufügen.
1. Ich weiß, das ist nicht ganz das, wonach Sie gefragt haben (lesen Sie auf andere Weise weiter). Aber wenn Sie die reale Welt Leistungsfähigkeit Ihrer NIC wissen wollen , anstatt was Ihr Computer sagt es sein sollte, können Sie iperf verwenden. Normalerweise mache ich das - weil du es nie weißt. Ich habe kürzlich eine 1-Gbit-Netzwerkkarte gekauft, die nur mit 672 Mbit / s übertragen wurde, deren Uplink-Kapazität jedoch 1 Gbit betrug. Gut, dass ich nachgesehen habe.
Sie benötigen zwei Computer.
Führen Sie auf dem ersten Computer iperf im Servermodus aus:
iperf -s
Auf der anderen Seite führen Sie iperf im Client-Modus aus:
iperf -c 192.168.0.10
Wenn Sie die Vollduplexgeschwindigkeit anzeigen möchten, versuchen Sie Folgendes:
iperf -d -c 192.168.0.10
Ersetzen Sie die IP-Adresse des Servers durch 192.168.0.10
2. Verfügt auf Ubuntu-Systemen /var/log/kern.log
über eine eingeschränkte Protokollierung von Kernel-Ereignissen. Es zeichnet die Verbindungsgeschwindigkeit und den Status einer Netzwerkkarte auf, wenn sich diese ändert. Ich bin sicher, dass andere Distributionen wahrscheinlich etwas Ähnliches tun oder dafür eingerichtet werden können.
$ tail -n 300 /var/log/kern.log.1 | grep slave0
Aug 28 12:54:04 haze kernel: [ 9452.766248] e1000e: slave0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: Rx/Tx
Aug 28 12:54:41 haze NetworkManager[921]: <info> [1472403281.8486] device (slave0): link disconnected
Aug 28 12:54:41 haze kernel: [ 9489.898476] e1000e: slave0 NIC Link is Down
3. Sie werden wahrscheinlich niemals so weit gehen müssen, aber Sie können C-Code schreiben , um die Geschwindigkeit zu erreichen. Getestet arbeiten und root ist nicht erforderlich.
https://stackoverflow.com/questions/2872058/get-link-speed-programmatically
#include <stdio.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <linux/sockios.h>
#include <linux/if.h>
#include <linux/ethtool.h>
#include <string.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
int sock;
struct ifreq ifr;
struct ethtool_cmd edata;
int rc;
sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);
if (sock < 0) {
perror("socket");
exit(1);
}
strncpy(ifr.ifr_name, "eth0", sizeof(ifr.ifr_name));
ifr.ifr_data = &edata;
edata.cmd = ETHTOOL_GSET;
rc = ioctl(sock, SIOCETHTOOL, &ifr);
if (rc < 0) {
perror("ioctl");
exit(1);
}
switch (ethtool_cmd_speed(&edata)) {
case SPEED_10: printf("10Mbps\n"); break;
case SPEED_100: printf("100Mbps\n"); break;
case SPEED_1000: printf("1Gbps\n"); break;
case SPEED_2500: printf("2.5Gbps\n"); break;
case SPEED_10000: printf("10Gbps\n"); break;
default: printf("Speed returned is %d\n", edata.speed);
}
return (0);
}