이 질문에 이미 답변이 있습니다. :
댓글
답변
이름에 관계없이 모든 IP 주소를 나열하려면 다음을 시도하십시오.
ifconfig | perl -nle "s/dr:(\S+)/print $1/e"
또는 :
ifconfig | awk "/inet addr/{print substr($2,6)}"
특정 인터페이스의 IP 만 원하는 경우 ifconfig
바로 뒤에 인터페이스 이름 (예 : eth0)을 지정합니다.
ifconfig eth0 | perl -nle "s/dr:(\S+)/print $1/e"
또는 :
ifconfig eth0 | awk "/inet addr/{print substr($2,6)}"
댓글
답변
할 수있는 작업 :
ip addr | grep "state UP" -A2 | tail -n1 | awk "{print $2}" | cut -f1 -d"/"
ip addr
에 나열된 첫 번째 비공개 IP 주소를 제공합니다.
예 : ip addr
, 다음을 얻습니다.
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
이전 명령 줄을 사용하면 192.168.0.85
가 표시됩니다. em1
의 IP 주소입니다.
쉘 스크립트 내의 변수에 넣으려면 var=$(ip addr | grep "state UP" -A2 | tail -n1 | awk "{print $2}" | cut -f1 -d"/")
. 이제 스크립트가 끝날 때까지 $var
에 IP 주소 값이 있습니다.
설명
답변
의 부드러운 복사 붙여 넣기 stackoverflow 왜냐하면 우리는 여러 사이트를 속일 수 없기 때문입니다. bash 또는 sh가 아니라는 것을 알고 있습니다.하지만이 시점에서 파이썬을 설치하지 않은 사람은 누구입니까?
netifaces . Mac에서 교차 플랫폼으로 설계되었습니다. OS X, Linux 및 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"
프로토콜을 색인화하는 데 사용되는 숫자는 /usr/include/linux/socket.h
(Linux)입니다. …
#define AF_INET 2 /* Internet IP Protocol */ #define AF_INET6 10 /* IP version 6 */ #define AF_PACKET 17 /* Packet family */
복사 붙여 넣기 종료
원하는 것은 아웃 바운드 인터페이스, 이 작동합니다.
아무도 언더 스를 할 수없는 것처럼 보이기 때문에 업 인터페이스를 열거하려는 경우 다른 옵션이 있습니다. 원하는 것을 정확히 입력하십시오.
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
댓글