파일 시스템에서 현재 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의 192.168.1.2에서 255.255.255.255 포트 67(xid=0xXXXXXXXXX)까지의 DHCPREQUEST
    1월 8일 17:49:45 mint dhclient: 192.168.1.1의 192.168 1월 8일 1.2에 대한 DHCPOFFER
    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나 다른 쉘 스크립트 또는 쉘 친화적인 스크립트를 사용하는 경우, 여기에 파이프 친화적인 grep & cut 방법을 사용하여 IP를 얻고 ifconfig, 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

관련 정보