Il y a quelques bonnes réponses ici, je voulais juste ajouter quelques options supplémentaires.
1. Je sais que ce n'est pas tout à fait ce que vous avez demandé (lisez la suite pour d'autres manières). Mais si vous souhaitez connaître les performances réelles de votre carte réseau , plutôt que ce que votre ordinateur vous dit d’être, vous pouvez utiliser iperf. Je fais généralement cela - parce que vous ne savez jamais. J'ai récemment acheté une carte réseau de 1 Gb qui n'a été transférée qu'à 672 Mbps, mais la liaison montante était de 1 Gb. C'est une bonne chose que j'ai vérifiée.
Vous aurez besoin de deux ordinateurs.
Sur le premier ordinateur, lancez iperf en mode serveur:
iperf -s
D'autre part, lancez iperf en mode client:
iperf -c 192.168.0.10
Si vous voulez voir la vitesse en duplex intégral, essayez plutôt ceci:
iperf -d -c 192.168.0.10
Remplace 192.168.0.10 par l'adresse IP du serveur
2. Sur les systèmes Ubuntu, la /var/log/kern.log
journalisation des événements du noyau est limitée. Il enregistrera la vitesse de liaison et le statut d'une carte réseau lorsqu'elle changera. Je suis sûr que d'autres distributions font probablement quelque chose de similaire ou peuvent être configurées pour le faire.
$ 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. Vous n'aurez probablement jamais, jamais besoin d'aller aussi loin, mais vous pouvez écrire du code c pour obtenir la vitesse. Testé de travail et la racine n'est pas nécessaire.
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);
}