python에서 리눅스 쉘 명령어(shell command)를 이용하여 자기 IP 알아내기


소켓 통신 등의 경우 특히 서버 역할을 하는 경우 자기 IP를 스스로 알아내는 코드기 필요하다.

검색해 보면 파이썬에서 이를 알아내는 코드가 소개되어 있는데 다음과 같이


socket.gethostbyname(socket.gethostname())

socket.gethostbyaddr(socket.gethostname())

socket.gethostbyname_ex(socket.gethostname())


127.0.0.1인 loop back IP 값만 반환해 준다.

리눅스의 경우는 파이썬에서 shell command를 적절히 사용하면 여러모로 간한하게 문제를 해결할수 있다.


우선 socket과 subprocess 모듈을 import해야 한다.


import socket

import subprocess


그리고 리눅스 shell command중에서 IP를 확인하는 명령어들이 몇가지 있으나 단지 IP 정보만이 아닌 여러가지 부가적인 정보를 같이 보여주기 때문에 사용하기 용이하지 않다.

대표적으로 ifconfig같은 경우 아래와 같은 정보를 보여준다.


enp0s3    Link encap:Ethernet  HWaddr 08:00:27:ff:a4:58  

          inet addr:192.168.0.150  Bcast:192.168.0.255  Mask:255.255.255.0

          inet6 addr: fe80::c33f:ad86:8225:3597/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:62078 errors:0 dropped:0 overruns:0 frame:0

          TX packets:56852 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:17715562 (17.7 MB)  TX bytes:44145423 (44.1 MB)


lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          inet6 addr: ::1/128 Scope:Host

          UP LOOPBACK RUNNING  MTU:65536  Metric:1

          RX packets:108 errors:0 dropped:0 overruns:0 frame:0

          TX packets:108 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:14178 (14.1 KB)  TX bytes:14178 (14.1 KB)


우리가 필요로하는 것은 단지 자신의 IP만 알면 되는데 이 경우 사용할수 있는 명령어가 hostname이라는 shell command이다.


hostname -I를 실행하면 192.168.0.150과 같은 자신의 IP를 알아낼수 있다.

아래는 코드조각이다.


import socket

import subprocess


myIP = subprocess.check_output("hostname -I", shell=True)

print 'My IP : ', myIP



+ Recent posts