모든 내용들이 정확하지 않을 수 있습니다. 구글링하며 공부한 내용을 개인적으로 적어놓은 글 입니다.
틀린 내용이 있다면 알려주시면 감사합니다.
netstat
- a / -n / -r 등등 netstat 뒤에 붙을 출력인자들이 많다.
모두를 기억 할 수 없으니 사용할 때 마다 찾아 보는걸로 하고
공부하면서 헷갈렸던걸 알아보자.
* 여기서 자기 자신만 이라는 단어가 와닿지 않아서 개념을 이해는데 어려웠다.
한 마디로 말해 동일한 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 -
# 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
예를 들자면
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에서는 :: 이렇게 표현하는 것이다.