소켓 통신 등의 경우 특히 서버 역할을 하는 경우 자기 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
댓글 없음:
댓글 쓰기