QL.túra

Kulturális smörgåsbord Esterházytól Wass Albertig, a gumicsizmától az iPad-ig, a Teletabiktól Sexpírig, a makrofágtól a mikrokontrollerig, miazmás...

Címkék

2000 (20) 2001 (6) 2002 (16) 2003 (164) 2004 (61) 2005 (40) 2006 (31) 2007 (28) 2008 (33) 2009 (175) 2010 (188) 2011 (201) 2012 (86) 2013 (40) 2014 (36) 2015 (26) 2016 (10) adáshiba (91) android (1) animáció (93) cygwin (3) film (410) gezarol (13) hájtek (159) hangoskönyv (32) ipad (17) klip (12) könyv (191) linux (29) színház (169) vers (17) windows (37) zene (111) Címkefelhő

+jegyzések

  • mongolili: V/14. ELP=Emerson, Lake and Palmer (a Cozy Powell-es felállás csak egyfajta "utóélet" volt) (2020.04.11. 22:45) [Zene] After Crying: 6 (1997)
  • törzsmókus: az első tecső link Chopint ad, nem Mahalát :( a másodiknál meg biztos van azóta jobb minőség… (2016.11.11. 13:27) [Zene] Besh o droM: Macsó hímzés
  • TrueY: @NYJetsTD: Hidd el, nem örülök ennek annyira. :) Sajnos csak 1 napot nyaraltam. A többit kórházban... (2016.10.12. 23:00) [Adáshiba] Achilles-ín
  • NYJetsTD: Ronaldoooooo.... milyen ügyes vagy. Mostantól egész életedben mondhatod, hogy sportsérülésed volt,... (2016.10.11. 21:01) [Adáshiba] Achilles-ín
  • TrueY: @NYJetsTD: Én a vereshagymás-zsíros kenyeret szeretem. Legutóbb Mikulás-futáskor ettem. De mostaná... (2016.03.21. 01:33) [Adáshiba] Futás...
  • Utolsó 20

Most ...

... múlok .osan

bmi_tiny.png


... hallgatom
Szabó Magda: Régimódi történet
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSqTmZEqlCRFgojyt52Q2n_qiMTyVlt-zJu-DpbNKVY6OQbBh4u


... olvasom
Alexander Steele (szerk.): Kezdő írók kézikönyve


... (Kik ezek? Kik ezek az embek? Kik ezek?)
profile for TrueY on Stack Exchange, a network of free, community-driven Q&A sites
free counters

[Hájtek] Hogyan nézzük meg, hogy egy hálókártya csatlakoztatva van-e Linuxon?

2016.03.22. 11:00 | TrueY | Szólj hozzá!

Címkék: linux hájtek 2013

https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSHBu61yfynTV014L9WFHO5fWi0DyI2WH24CX7zutPcNT6Y9v8Ystackoverflow

Ma egy viszonylag egyszerű problémára keresem a megoldást. Adva van egy Linux-os gép, amiben persze van egy ethernet csatlakozó, amivel a LAN-on lóg. Hogyan lehet megtudni, hogy a kapcsolat él-e, ha nem él, akkor azért nem mert az ethernet kábel ki van-e húzva, vagy el sincs indítva az adott kapcsolat.

Keresgélve a neccen találtam egy jó kis programot: ethtool(8). Ezzel lehet ilyeneket nézegetni. A parancs ethtool eth0. Meg strace(1)-eltem, hogy azt is megtudjam, hogyan lehet C-ből megtudni az infókat...

Az eredmény ez a kód:

#include <sys/ioctl.h>     // SIOCSIFFLAGS
#include <errno.h>         // errno
#include <linux/ethtool.h> // ETHTOOL_GLINK
#include <linux/sockios.h> // SIOCETHTOOL

#define ERROR(fmt, ...) do { printf(fmt, __VA_ARGS__); return -1; } while(0)

// Open any socket to get the driver
int socId = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if (socId < 0)
    ERROR("IFUTIL: socket failed. Errno = %d", errno );

struct ifreq if_req;
(void) strncpy(if_req.ifr_name, pDeviceName, sizeof(if_req.ifr_name));

struct ethtool_value edata;
edata.cmd = ETHTOOL_GLINK;
if_req.ifr_data = (char*) &edata;
if (ioctl(socId, SIOCETHTOOL, &if_req) == -1)
    ERROR("IFUTIL: ioctl failed. Errno = %d", errno );

state = !!edata.data;
close ( socId );

Egy gond van, hogy csak root jogosultsággal tudjuk futtatni. Szomorú. Lehet-e sima nyúzerként is megszerezni a kívánt információt? Az ethtool helyett alacsonyabb szintű ioctl parancsokat kell nézni.

#include <stdio.h> // printf
#include <string.h> // strncpy
//#include <sys/socket.h> // AF_INET
#include <sys/ioctl.h> // SIOCGIFFLAGS
#include <errno.h> // errno
#include <netinet/in.h> // IPPROTO_IP
#include <net/if.h> // IFF_*, ifreq

#define ERROR(fmt, ...) do { printf(fmt, __VA_ARGS__); return -1; } while(0)

int CheckLink(char *ifname) {
    int state = -1;
    int socId = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
    if (socId < 0) ERROR("Socket failed. Errno = %d\n", errno);

    struct ifreq if_req;
    (void) strncpy(if_req.ifr_name, ifname, sizeof(if_req.ifr_name));
    int rv = ioctl(socId, SIOCGIFFLAGS, &if_req);
    close(socId);
    if ( rv == -1) ERROR("Ioctl failed. Errno = %d\n", errno);

    return (if_req.ifr_flags & IFF_UP) && (if_req.ifr_flags & IFF_RUNNING);
}

Ha IFF_UP be van állítva, akkor az ethernet interface el vagyon indítva (ifup), ha IFF_RUNNING is be van állítva, akkor a dugó be vagyon dugva.


Up & running minden nap!

A bejegyzés trackback címe:

https://qltura.blog.hu/api/trackback/id/tr245211129

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása