Kis segítséget kérnék nmcli ügyben.
Az nmcli egy kényelmes szkriptelhető eszköz a hálózati kapcsolatok kezelésére. Van rá mód, hogy megállapítsam van-e a számítógépről kifelé irányuló (nem belső virtuális) kapcsolat. Arra nem találtam megoldást, hogy ha van kapcsolat akkor az melyik hálózati eszközt vagy hálózati kapcsolatot jelenti pontosan.
Kapcsolati státusz lekérdezése:
$ nmcli general status
STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN
connected full disabled disabled enabled disabled
STATE állapota:
connected - fizikai hálózati eszköz kapcsolódva.
connected (local only) - fizikai hálózati eszköz nincs kapcsolódva, csak pl. virtuális hálózati eszköz (vmnet1).
disconnected - semmilyen kapcsolat nincs jelen.
Arra vonatkozólag nincs infó, hogy a "connected" esetén pontosan melyik eszköz és/vagy kapcsoaltról van szó.
Hálózati eszközök lekérdezése:
$ nmcli device status
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected DHCP
vmnet1 ethernet connected vmnet1
vmnet8 ethernet connected vmnet8
wlan0 wifi unavailable --
lo loopback unmanaged --
Aktív hálózati kapcsolatok lekérdezése:
$ nmcli connection show --active
NAME UUID TYPE DEVICE
DHCP 9c41f813-5a7b-4b59-a81b-444c10c383f9 802-3-ethernet eth0
vmnet8 c8887441-638d-43f3-a652-f96c44b4cc22 802-3-ethernet vmnet8
vmnet1 1e5e1056-f165-4f04-84cc-50f916200b29 802-3-ethernet vmnet1
Tehát a kérdésem a következő: Milyen módon lehetne összefüggést találni a kapcsolati státusz és az eszközök vagy hálózati kapcsolatok között?
Ha esetleg van (szkriptelhető) jobb módja a hálózat kezelésének mint az nmcli (vagy RTFM) akkor az is jó lehet.
A válaszokat előre is köszönöm.
Hozzászólások
Egy éve futottam bele ebbe a problémában, sajnos nem találom konkrétan a megoldást amit sikerült összerakni, de ha jól emlékszem, interfész név alapján UUID-t meg lehet határozni, az alapján meg ki lehetett szedni a kapcsolatot.
szerk.: bocs, hülyeség amit írtam, az más probléma volt.
De a státusz lekérdezés eredménye semmilyen utalást nem tesz eszközre vagy kapcsolatra.
Ezért nem tudom sehogyan sem a "STATE = connected" értéket összepárosítani egy kapcsolattal vagy eszközzel.
Én viszont sajnos nem tudom megállapítani az eszközlistából vagy a kapcsolatlistából, hogy melyik valós (külső) hálózati kapcsolat és melyik csak egy helyi virtuális kapcsolat. Az eszközök és kapcsolatok neve bármi lehet ezért nem lehet arra építeni, hogy eth0 a hálózati eszköz neve.
Kellene az a kapcsolat, amelyiken az internetet éred-el pl.? Vagy általánosan kellenének azok, amiken keresztül érhetsz el internetet?
A következőket szeretném (nmcli-vel vagy más módon)
- Megállapítani, hogy van-e olyan hálózati kapcsolat ami nem helyi virtuális.
- Ha van kapcsolat akkor szükség lenne a hálózati eszköz részletes adataira (pl. kapcsolat sebessége, wifi/gsm térerő, stb.) és a hálózati kapcsolat részletes adataira (ip, átjáró, stb.)
Köszi az infókat, remélem összejön, közben én is gondolkodom rajta. Pusztán nmcli-vel viszont nem biztos, hogy menni fog, mármint elképzelhető, hogy ezeket az infókat nem lehet kinyerni belőle.
sysfs es proc?
Persze neked kell megirni a scripttet, de minden ott van.
Rendben, de hogyan lehet egyértelműen eldönteni (nem tudom, hogy az nmcli hogyan csinálja), hogy van-e olyan kapcsolat és ha van akkor melyik az ami nem virtuális?
tree /sys/class/net
/sys/class/net
├── docker0 -> ../../devices/virtual/net/docker0
├── eth0 -> ../../devices/pci0000:00/0000:00:1c.0/0000:01:00.0/net/eth0
├── lo -> ../../devices/virtual/net/lo
├── virbr0 -> ../../devices/virtual/net/virbr0
├── virbr0-nic -> ../../devices/virtual/net/virbr0-nic
└── wlan0 -> ../../devices/pci0000:00/0000:00:1c.3/0000:02:00.0/net/wlan0
ha van mogotte pci bus, akkor az valodi, ha meg ott a virtual akkor az nem valodi
Nagyon gagyi megvalositassal :D
ls -l /sys/class/net | awk '{ if( /virtual/ ) { print "virtual -- "$9 } else { print "real -- "$9 }; system("ip addr show "$9" |grep -Po \"inet \\K[\\d.]+\" "); print "\n" }'
BTW én úgy értelmeztem a posztolót, hogy neki az a virtuális amin nem az internet jön. :)
Köszönöm az infót.
Nekem nem működik.
szerk:
Ezt tüzetesebben is megnézem.
Az IP-t ha átírod vagy valamelyik interfészére vagy az átjáróéra, akkor fog, viszont ez is csak kiírja hogy kapcsolódva
De pont az a problémám, hogy nem tudok ip címet, eszköz nevet vagy bármit ami alapján én el tudnám dönteni, hogy az adott hálózati kapcsolat / interfész helyi vagy sem.
Az "ip r" esetén kapok egy plusz információt ami talán segíthet:
default via 192.168.1.1 dev eth0 proto static metric 1024
Bocs, ez talán robusztusabb:
Tehát akkor a route tábla alapján tudom egyértelműen eldönteni, hogy az adott hálózati eszköz fizikai eszköz és nem virtuális?
Azt tudod meg, hogy az internetre menő forgalom melyk interfészen megy ki. Egy "vmnet1" vagy "lo" interfészt ez nem ad vissza.
Viszont semmi garancia arra, hogy fizikai interfészt kapsz vissza. A default route ugyanis lehet vpn, bridge vagy bonding device, satöbbi. Ekkor egy újabb kör annak megállapítsa, hogy ezek alatt melyk fizikai interfészen megy a forgalom, amire nyilván nincs univerzális megoldás.
Csak a route és társai elég régóta deprecated motyók - tessen az ip parancsot használni :-P
nmtui -t ismered?
Igen, de nem értem hogy segít a probléma megoldásában.
-