Řešení 1:
Stačí použít příkaz jako:ethtool eth0
abyste získali potřebné informace. Příklad:
$ sudo ethtool eth0 | grep Speed
Speed: 1000Mb/s
Řešení 2:
Pokud ethtool chybí, je možné použít informace z jádra:
cat /sys/class/net/<interface>/speed
Příklad rozhraní s názvem eth0:
cat /sys/class/net/eth0/speed
Řešení 3:
POZNÁMKA: manuálovou stránku pro mii-tool
má toto vyloučení odpovědnosti:
This program is obsolete. For replacement check ethtool.
Použijte mii-tool
sledovat sjednanou rychlost sítě.
Př.
eth0: no link
eth1: negotiated 100baseTx-FD, link ok
Řešení 4:
Je zde několik skvělých odpovědí, jen jsem chtěl přidat několik dalších možností.
1. Vím, že to není úplně to, na co jste se ptali (čtěte dále pro další způsoby). Ale pokud chcete znát skutečný výkon vaší síťové karty , spíše než to, co váš počítač říká, že by to mělo být, můžete použít iperf. Obvykle to dělám - protože člověk nikdy neví. Nedávno jsem si koupil 1Gb NIC, která přenášela pouze 672Mbps, ale její uplink byl 1Gb. Dobře, že jsem to zkontroloval.
Budete potřebovat dva počítače.
Na prvním počítači spusťte iperf v režimu serveru:
iperf -s
Na druhé straně spusťte iperf v klientském režimu:
iperf -c 192.168.0.10
Pokud chcete vidět plnou duplexní rychlost, zkuste místo toho toto:
iperf -d -c 192.168.0.10
Nahraďte adresu IP serverů 192.168.0.10
2. Na systémech Ubuntu /var/log/kern.log
má omezené protokolování událostí jádra. Při změně zaznamená rychlost připojení a stav síťové karty. Jsem si jistý, že jiné distribuce pravděpodobně dělají něco podobného nebo mohou být nastaveny tak, aby to dělaly.
$ 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. Pravděpodobně nikdy, nikdy nebudete muset zajít tak daleko, ale můžete napsat kód c že získat rychlost. Testovaná funkčnost a root není vyžadován.
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);
}
Řešení 5:
Jak zmínil Khaled, měli byste být schopni spustit ethtool pouze s rozhraním jako argumentem. Zde budou uvedeny podporované rychlosti, inzerované rychlosti, aktuální rychlost a spousta dalších věcí:
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: d
Wake-on: d
Current message level: 0x00000007 (7)
Link detected: yes
Můžete také spustit dmesg
, a grep pro vaše rozhraní, ale to nemusí fungovat, pokud váš systém běží dlouhou dobu a aktuální vyrovnávací paměť již tyto informace neobsahuje (v takovém případě budete muset grep použít starší /var/log/dmesg .* soubory):
dmesg |grep eth0
[ 2.867481] e1000: eth0: e1000_probe: Intel(R) PRO/1000 Network Connection
[ 19.429444] ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 19.431555] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None
[ 19.449341] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 26.972379] e1000: eth0: e1000_set_tso: TSO is Enabled
[ 29.920458] eth0: no IPv6 routers present