Kuinka saada IP-osoite käyttämällä komentosarjaa? [kaksoiskappale]

Tähän kysymykseen on jo annettu vastauksia :

Kommentit

  • Isn ' t ifconfig -a mitä ' etsit?
  • @rajcoumar En ymmärrä miksi yksityisen IP-osoitteen käyttö estää sinua käyttämästä ifconfig -a -lähtö. Itse asiassa hyväksytyksi merkitsemäsi vastaus tekee juuri tämän (käyttää vain ip -kohtaa ifconfig -kohdan sijaan).
  • ip -4 route get 8.8.8.8 | awk {'print $7'} | tr -d '\n'
  • MY_IP=$(getent hosts $(hostname) | awk '{print $1}')

Vastaa

Jos haluat listata kaikki IP-osoitteet nimestä riippumatta, kokeile tätä:

ifconfig | perl -nle "s/dr:(\S+)/print $1/e" 

tai:

ifconfig | awk "/inet addr/{print substr($2,6)}" 

Määritä käyttöliittymän nimi (esim. eth0) heti ifconfig jälkeen, jos haluat vain tietyn liitännän IP: n:

ifconfig eth0 | perl -nle "s/dr:(\S+)/print $1/e" 

tai:

ifconfig eth0 | awk "/inet addr/{print substr($2,6)}" 

kommentit

  • kiitos, tämä on minun tuotokseni 192.168.56.102 10.192.1.218 10.0.2.15 127.0.0.1, Haluan nyt ottaa 10.192.1.218 ja määrittää uudet muuttujat shell-komentosarjassa. miten voimme tehdä?
  • joka vain näyttää IP-osoitteet .. olisi parempi, jos vastaavat liitäntänimet kuten eth0, eth1, … näytetään myös. 🙂
  • Käytä ehdottomasti reititystaulukoita kuten @ymattw ehdottaa! Tällä on upea ominaisuus palauttaa tarkalleen osoite, jonka kautta tietokoneesi on määritetty puhumaan annettuun osoitteeseen. Luulen, että haluat todennäköisesti awk '{print $NF; exit}' saada ensimmäisen rivin viimeinen kenttä (lähdeosoite).
  • Kiitos huomautuksesta, näyttää viimeiseltä muokkausta ei tallennettu '. Mielenkiintoista, en voinut ' t muokata omaa vastaustani, joten vain julkaise uudelleen: ip route get 1.1.1.1 | awk '{print $NF; exit} # saat tämän käyttöliittymän ip: n ulkopuolella

Vastaa

Voit tehdä:

ip addr | grep "state UP" -A2 | tail -n1 | awk "{print $2}" | cut -f1 -d"/"

joka antaa sinulle ensimmäisen yksityisen IP-osoitteen luettelossa ip addr.

Esimerkiksi ip addr, saan:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: em1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:16:76:de:c1:f1 brd ff:ff:ff:ff:ff:ff inet 192.168.0.85/24 brd 192.168.0.255 scope global dynamic em1 valid_lft 42505sec preferred_lft 42505sec inet6 fe80::216:76ff:fede:c1f1/64 scope link valid_lft forever preferred_lft forever 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 52:54:00:da:92:d0 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 500 link/ether 52:54:00:da:92:d0 brd ff:ff:ff:ff:ff:ff 

Aikaisemmalla komentorivillä saan 192.168.0.85 mikä on em1 -palvelun IP-osoite.

Voit laittaa sen muuttujaan komentosarjakomentosarjassa tekemällä var=$(ip addr | grep "state UP" -A2 | tail -n1 | awk "{print $2}" | cut -f1 -d"/"). Nyt komentosarjan loppuun asti $var on IP-osoitteen arvo.

Kommentit

  • Ja se todellakin ' on hyvin samanlainen kuin unix.stackexchange.com/questions/8518/… . En etsinyt kopioita ennen lähettämistä …
  • ip addr | grep ' tila YLÖS ' -A2 | häntä -n1 | awk ' {print $ 2} ' | Leikkaa -f1 -d ' / ' tällä komennolla sain yksityisen osoitteen. Haluan nyt määrittää lähdön muuttujalle
  • @rajcoumar päivitin vastauksen. Huomaa, että tämä kysymys oli jo esitetty ja vastattu tällä sivustolla. Katso lisätietoja kohdasta unix.stackexchange.com/questions/4569/… .
  • Huomautus myös, että vastaukseni ei ole tyylikkäin. Voi olla parempi tapa tehdä tämä kuin jäsentää ip addr -lähtö.
  • ip addr | grep 'state UP' -A2 | tail -n1 | awk -F'[/ ]+' '{print $3}' tämä toimii myös, muuten

Vastaa

Räikeä kopiopasta kohteesta stackoverflow , koska emme voi harhauttaa sivustojen yli. Tiedän, että se ei ole bash tai sh, mutta kenellä ei kuitenkaan ole pythonia asennettuna tässä vaiheessa?

Käytä netifaces . Se on suunniteltu monitasoiseksi Macissa   OS   X, Linux ja Windows.

>>> import netifaces as ni >>> ni.interfaces() ["lo", "eth0", "eth1", "vboxnet0", "dummy1"] >>> ni.ifaddresses("eth0") {17: [{"broadcast": "ff:ff:ff:ff:ff:ff", "addr": "00:02:55:7b:b2:f6"}], 2: [{"broadcast": "24.19.161.7", "netmask": "255.255.255.248", "addr": "24.19.161.6"}], 10: [{"netmask": "ffff:ffff:ffff:ffff::", "addr": "fe80::202:55ff:fe7b:b2f6%eth0"}]} >>> >>> ni.ifaddresses.__doc__ "Obtain information about the specified network interface.\n\nReturns a dict whose keys are equal to the address family constants,\ne.g. netifaces.AF_INET, and whose values are a list of addresses in\nthat family that are attached to the network interface." >>> # for the IPv4 address of eth0 >>> ni.ifaddresses("eth0")[2][0]["addr"] "24.19.161.6" 

Protokollien indeksointiin käytetyt numerot ovat peräisin /usr/include/linux/socket.h (Linuxissa) …

#define AF_INET 2 /* Internet IP Protocol */ #define AF_INET6 10 /* IP version 6 */ #define AF_PACKET 17 /* Packet family */ 

Lopeta kopiointi

Jos kaikki mitä haluat, on ylös- ja lähtevä käyttöliittymä, tämä toimii.

Vielä jokin muu vaihtoehto, jos haluat vain luetella ylimääräisiä rajapintoja, koska kukaan ei tunnu pystyvän aliarvioimaan tand tarkalleen mitä haluat:

import netifaces as ni ints = ni.interfaces() for i in ints: if "eth" in i: try: ni.ifaddresses(i)[2][0]["addr"] print("interface: " + i) print("address: " + ni.ifaddresses(i)[2][0]["addr"]) except: pass elif "wlan" in i: try: ni.ifaddresses(i)[2][0]["addr"] print("interface: " + i) print("address: " + ni.ifaddresses(i)[2][0]["addr"]) except: pass 

Kommentit

  • Huomaa, että OP ilmoitti kysymyksessään, että se ei ' tiedä etukäteen, mikä liitäntä on YLÖS.Hän haluaa vain liittymän IP-osoitteen tilassa " ylös " tietämättä, kumpi se on.
  • Sitten se ' saa vain paikallisen osoitteen avoimesta pistorasiasta Googleen. Tavalla, jolla luin sen, hän halusi luetella kaikki liitännät ja liittää IP: t rajapintoihin sen sijaan, että vain avaisi pistorasian ja etsii paikallista IP: tä.
  • Lisäsi yksinkertaisen komentosarjan " anna minulle lähtevä IP " -ongelma.
  • Hän ei ' t haluavat ulkoisen osoitteensa, mutta yksityisen osoitteensa. Tapa, jolla ymmärrän sen, hän voisi olla kytketty yksityiseen verkkoon millä tahansa käyttöliittymällä ja haluaa vain tietää yksityisen IP-osoitteen tietämättä mitä käyttöliittymää käytetään. toinen komentosarja ' on vain lähtevä yksityinen osoite.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *