모든 내용들이 정확하지 않을 수 있습니다. 구글링하며 공부한 내용을 개인적으로 적어놓은 글 입니다.

틀린 내용이 있다면 알려주시면 감사합니다.

 


netstat 

- a / -n / -r 등등 netstat 뒤에 붙을 출력인자들이 많다.

모두를 기억 할 수 없으니 사용할 때 마다 찾아 보는걸로 하고

 

공부하면서 헷갈렸던걸 알아보자.

 

Local Address column은 현재 열려있거나 혹은 리스닝하고있는 ip, port를 나타낸다.

 

만약 해당 ip가 0.0.0.0이라면 all interface를 받는 다는 뜻이며 모든 ip에 대해서 Open 되어 있다는 뜻이다.
반대로 127.0.0.1로 되어있다면 loopback이라는 뜻으로 자기 자신만 호출가능한 상태를 뜻한다.

* 여기서 자기 자신만 이라는 단어가 와닿지 않아서 개념을 이해는데 어려웠다.

한 마디로 말해 동일한 local 프로세스끼리만 통신이 가능한것이다.

 

Local Address 
- 로컬(자신)이 서비스하는 서버의 상태와 원격으로 접속된 경우엔 로컬 프로세스에 할당된 포트정보를 나타낸다. 
* 로컬 서비스 서버 상태  
  > 0.0.0.0:port - INADDR_ANY의 의미로 외부 접속을 허용하는 상태이다. port 스캐닝 시 이러한 프로세스의 포트가 검출된다. 
  > 127.0.0.1:port - local only의 의미로 외부 접속이 불가하고 동일한 local 프로세스끼리만 통신이 가능하다. 포트 스캐닝 시 검출되지 않는다. 
  > 192.168.1.100:port - 현재 장치와 원격지가 세션을 맺었단 의미이다. 로컬에서 열린 포트로 접속을 했을 수 도있고, 로컬이 원격으로 접속했을 수도 있다. 이경우 포트는 사용 가능한 무작위의 포트가 사용된다.(OS가 정해준다.) 
  > :::port - IPv6 대응 외부 접속을 허용하는 상태이다. 


Foreign Address 
- 원격에서 접속된, 또는 원격으로 접속한 세션의 IP주소와 포트 정보를 나타낸다. 
즉 로컬 프로세스와 세션을 맺은 상대에 대한 정보이다.

출처: https://muabow.tistory.com/75 [이름 같은게 중요 한가요:티스토리]

 

 
$ netstat -antplF
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -  
tcp        0      0 0.0.0.0:9050          0.0.0.0:*               LISTEN      -        
(any ip could connect to 9050 port | only local ip could connect 631 port)

# 127.0.0.1:xxx, 127.0.1.1 ::1 (for IPv6) → localhost, the loop back interface - those services can only be contacted from your local machine

# 0.0.0.0:xxx, :::xxx → any local address:port-number - active connections: the IP-address and the port used by that special connection

 


예를 들자면

 

 

 

3344 PID 를 가진 프로세스가 4767 포트로 local 프로세스로 부터 오는 TCP protocol 을 모든 port 에 대해 listening 하고 있다는 소리이다. 

뭔 프로그램인지는 모르겠지만 위 프로그램이 4767 포트를 열고 로컬 프로세스로부터 오는 TCP를 기다리고 있는 것이다.

바로 아래 

는 로컬 프로세스 중에 어떤 프로그램이 49713 이라는 포트로 3344 PID 를 가진 프로그램으로 접근해서 4767 포트와 ESTABLISHED 됐다는 소리이다. 

 

그러면 49713 포트를 쓰고 있는 프로세스는 뭘까?  아래를 보면 PID가 12576 인 프로세스이다. 

PID 12576 인 로컬에서 실행중인 프로세스의 49713 포트가 다른 로컬 프로세스 ( 4767을 쓰는 프로세스, 여기서는 위 에 있는 PanGPS.exe 가 될 것이다.) 의 4767 포트를 통해 ESTABLISHED 됐다.

 

한 마디로 말해 PID 3344 PanGPS 가 4767 포트 열고 LISTENING 하고 있다가 PID 12576 이 접근을 해서 서로 통신하고 있다고 유추 할 수 있다.

 

PID 12576
아래 PID 3344 인 프로그램 처럼 4767 포트를 열고 any Open ( 0.0.0.0:0 )   LISTENING 하고 있지 않았으니깐 말이다.

 

 

 


그렇다면 아래 0.0.0.0:xxxx 는 무엇을 의미 할까?

 

 

 

이는 로컬에서 돌아가는 프로세스 뿐만 아니라 모든 외부에서 오는 프로세스,

즉 모든 ip 에 대해서 해당 port 로 LISTENING 을 하고 있다는 소리이다. 

 

옆에 PID를 찾아보면 'svchost.exe' 가 많았고,

인크레더빌드나, 언리얼 Trace server 같은 프로그램도 보였다.

 

조금 명확하지 않아 구글링을 해봤는데 추가적으로 알면 좋을 내용이다.

이런 글을 보았다.

 

그러니깐 내 로컬에 띄어져 있는 웹서버가 있다고 한다면, 그리고 그 웹서버는 192.168.1.1 과 10.1.2.1 의 두개의 ip 주소를 가지고 있다면 apache 같은 웹서버 데몬으로 0.0.0.0 을 LISTEN 하게 만들어주면 192.168.1.1 과 10.1.2.1 모두에게 접근이 가능하다.단 해당 ip 주소와 웹 포트가 접근 가능한것만

 

 

 

정리해보자면, INADDR_ANY 를 사용하여 0.0.0.0:port 으로 즉, 모든 ip 접속에 대해 해당 port 로 LISTENING 하고 있다가

접속하면 소켓이 바인딩 되서 통신하는 서버 혹은 네트워크 주소를 표시하게 된다는것 같다.

 

 


다른 내용으로

 

[ :: ]

 

도 볼 수 있는데 

요거는 ipv4 에서 모든 ip라고 나타내고 싶으면 0.0.0.0 으로 표현하지만,

 

ipv6에서는 :: 이렇게 표현하는 것이다.

 


 

 

+ Recent posts