파일 시스템에서 현재 IP 주소를 읽으시겠습니까?

파일 시스템에서 현재 IP 주소를 읽으시겠습니까?

저는 시스템의 현재 IPv4 주소(DHCP를 통해 수신됨)가 연결되어 있고 주소가 있는 경우 이를 알아야 하는 프로그램을 작성하고 있습니다. 논쟁의 여지가 있으므로 언어는 관련이 없으며 디스크의 파일에서 읽어야 합니다. 현재 IPv4 주소를 항상 저장하는 파일이 있습니까?

답변1

/proc/net/tcpIP 주소를 리틀 엔디안 4바이트 16진수 형식으로 저장하는 파일이 있습니다 . 그러나 이는 IP 주소를 찾기 위한 세션이 열려 있다는 가정을 전제로 합니다. 그 외에 명령을 사용할 수도 있습니다 ip addr show.

IP 주소를 얻으려면 문자열을 반대로 해야 합니다. 인용하다이것파일에서 출력을 얻는 방법에 대한 답변입니다 /proc/net/tcp.

답변2

현재 IP 주소를 포함한다고 보장되는 파일이 디스크에 없습니다. DHCP를 통해 IP 주소를 얻은 경우 DHCP가 어딘가에 주소를 썼을 수 있지만 표준 위치는 없습니다.

현재 IP 주소를 얻는 일반적이고 이식 가능한 방법은 ifconfig또는 (Linux 전용) 의 출력을 구문 분석하는 것입니다 ip addr show. 기본 인터넷 연결 주소 외에도 루프백 주소 127.0.0.1이 있으며 내부 네트워크, 가상 머신 등의 경우 더 많은 주소가 있는 경우도 있습니다. 좋은 힌트는 첫 번째 기본 경로를 제공하는 인터페이스의 주소를 검색하는 것입니다.

default_interface=$(route -n | awk '$1 == "0.0.0.0" {print $8; exit}')
ip_address=$(ifconfig "$default_interface" | awk 'sub(/.* inet addr:/, "") {print $1}')

답변3

/var/lib/dhcp/Linux Mint (Ubuntu 14.04 기반) 폴더를 살펴보았는데 거기에 있는 유일한 파일은 비어 있었습니다.

그러나 모든 파일을 검색한 결과 다음을 발견했습니다.

  • /var/lib/NetworkManager/dhclient-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-eth0.lease
    (x의 거의 임의의 문자 및 숫자 포함) fixed-address xxx.xxx...linuxfan의 답변에서 붙여넣은 파일처럼 보이는 줄

  • 항목/var/log/syslogIP 주소(예: 192.168.1.2)를 사용하면 이 중 하나를 선택할 수 있습니다(자주 변경되는 경우 마지막 주소일 수도 있음).

    1월 8일 17:49:45 mint dhclient: eth0에서 255.255.255.255 포트 67(xid=0xXXXXXXXXX)의 192.168.1.2에 대한 DHCPREQUEST 1
    월 8일 17:49:45 mint dhclient: 192.168.1.1에서 192.168.1.2의 DHCPOFFER
    1월 8일 17 :49:45 mint dhclient: 192.168.1.1에서 192.168.1.2의 DHCPACK
    1월 8일 17:49:45 mint dhclient: 192.168.1.2로 바인딩 -- 38149초 내에 갱신.
    Jan 8 17:49:45 mint NetworkManager[1363]: 주소 192.168.1.2
    Jan 8 17:49:45 mint avahi-daemon[1117]: 주소 192.168.1.2를 사용하여 인터페이스 eth0.IPv4에서 mDNS 멀티캐스트 그룹에 가입합니다.
    Jan 8 17:49:45 mint avahi-daemon[1117]: eth0.IPv4에서 192.168.1.2에 대한 새 주소 레코드를 등록하는 중입니다.

또는 bash나 다른 쉘 스크립트 또는 쉘 친화적인 것을 사용하는 경우 에서 IP를 가져오거나 원하는 것으로 ifconfig변경하거나 심지어 모두에 대해 변경하는 파이프 친화적인 grep & cut 방법이 있습니다 .eth0-a

ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d ' ' -f 1

단일 파일을 -ing하는 것 time보다 훨씬 더 많은 시간이 걸리지 않습니다 . 위의 작업은 하나의 파일을 -ing하는 데 소요됩니다.grepreal 0m0.002s, user 0m0.000s, sys 0m0.000sgrepreal 0m0.001s, user 0m0.000s, sys 0m0.000s

답변4

모든 DHCP 임대 정보는 다음 위치에 저장됩니다./var/lib/dhcp/dhclient.eth0.leases

# tail -14 /var/lib/dhcp/dhclient.eth0.leases 
lease {
  interface "eth0";
  fixed-address 192.168.0.13;
  option subnet-mask 255.255.255.0;
  option routers 192.168.0.1;
  option dhcp-lease-time 604800;
  option dhcp-message-type 5;
  option domain-name-servers 75.75.75.75,75.75.76.76;
  option dhcp-server-identifier 192.168.0.1;
  option domain-name "hsd1.ca.comcast.net.";
  renew 6 2015/01/10 10:38:07;
  rebind 2 2015/01/13 16:19:22;
  expire 3 2015/01/14 13:19:22;
}

그렇긴 하지만, 출력을 구문 분석하는 것도 나쁘지 않습니다.ifconfig

관련 정보