Получение интерфейса MTU under Linux с PCAP

Смонтируйте sftp папку в своей системе при использовании OS X, можно использовать Передачу, чтобы сделать это или Linux (Ubuntu в этом случае), можно использовать это руководство http://blog.damontimm.com/how-to-mount-a-sftp-folder-ssh-ftp-on-ubuntu-linux-using-sshfs-fuse/.

Они все используют FuSE, таким образом, я держал пари, что он также работает в Windows также при поиске его. Но после того как Вам смонтировали его, необходимо смочь использовать любые команды, Вы можете исходно в Вашей системе.

2
задан 18 February 2012 в 19:26
2 ответа

В PCAP нет простого способа сделать это (без API).

Однако для Linux> = 2.6 Solvent опубликовал простое решение, которое считывает файл следующего вида: / sys / class / net / INTERFACE_X / mtu . Сделать это на C.

int getMTU(char *name) {
FILE *f;
char buf[128];
char *line = NULL;
ssize_t count;
size_t len = 0;
int mtu;

snprintf(buf, sizeof(buf), "/sys/class/net/%s/mtu", name);
f = fopen(buf, "r");
if(!f) {
    perror("Error opening:");
    exit(EXIT_FAILURE);
}
count = getline(&line, &len, f);

if (count == -1) {
    perror("Error opening:");
    exit(EXIT_FAILURE);
}
sscanf(line, "%d\n", &mtu);
fclose(f);

return mtu;
}

тривиально. Читая исходный код PCAP, я обнаружил, что разработчики PCAP использовали более сложное, но элегантное решение для чтения MTU интерфейса, вызвав ioctl . Это упрощенная версия, которую я написал:

#include <sys/ioctl.h>
#include <net/if.h>

int get_mtu(int fd, const char *device) {
struct ifreq ifr;

if (!device)
    return 65535;

memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));

if (ioctl(fd, SIOCGIFMTU, &ifr) == -1) {
    perror("Error opening:");
    exit(EXIT_FAILURE);
}

return ifr.ifr_mtu;
}

Для дальнейших ссылок,

2
ответ дан 3 December 2019 в 09:21

Один из вариантов в Linux - это файл sysfs mtu в / sys / class / net / devicename

$ cat /sys/class/net/eth0/mtu /sys/class/net/lo/mtu
1500
16436
4
ответ дан 3 December 2019 в 09:21

Теги

Похожие вопросы