FreeBSD에서 열린 포트를 찾는 15 가지 유용한 'Sockstat 명령 예제'


Sockstat는 FreeBSD에서 네트워크 및 시스템 개방 소켓을 표시하는 데 사용되는 다목적 명령 줄 유틸리티입니다. 주로 sockstat 명령은 FreeBSD에 기본적으로 설치되며 일반적으로 FreeBSD 시스템에서 특정 네트워크 포트를 연 프로세스의 이름을 표시하는 데 사용됩니다.

그러나 sockstat는 프로토콜 버전 (두 IP 버전), 연결 상태 및 데몬 또는 프로그램이 바인딩하고 수신하는 포트에 따라 열린 소켓을 나열 할 수도 있습니다.

또한 일반적으로 Unix 도메인 소켓 또는 IPC로 알려진 프로세스 간 통신 소켓을 표시 할 수 있습니다. grep 필터와 결합되거나 awk 유틸리티를 통해 파이프 된 Sockstat 명령은 로컬 네트워킹 스택을위한 강력한 도구임이 입증되었습니다.

소켓을 소유 한 사용자, 네트워크 소켓의 파일 설명자 또는 소켓을 연 프로세스의 PID를 기반으로 열린 연결에 대한 결과를 축소 할 수 있습니다.

이 가이드에서는 FreeBSD에있는 sockstat 명령 줄 네트워킹 유틸리티의 일반적인 활용 예제를 나열 할 것입니다.

  1. FreeBSD 11.1 Installation Guide

1. FreeBSD에 열려있는 모든 포트 나열

옵션이나 스위치없이 간단히 실행하면 sockstat 명령은 아래 스크린 샷과 같이 FreeBSD 시스템에서 열려있는 모든 소켓을 표시합니다.

# sockstat

sockstat 출력에 표시되는 값은 다음과 같이 설명됩니다.

  • USER : The owner (user account) of the socket.
  • COMMAND : The command which with opened the socket.
  • PID : The process ID of the command which owns the socket.
  • FD : The file descriptor number of the socket.
  • PROTO : The transport protocol (usually TCP/UDP) associated with the opened socket or socket type in case of unix domain sockets (datagram, stream or seqpac) for UNIX sockets.
  • LOCAL ADDRESS : It represents the local IP address for IP based sockets. In case of Unix sockets it represents endpoint filename attached to the socket. The “??” notation implies that the socket endpoint could not be recognized or established.
  • FOREIGN ADDRESS : The remote IP address where the socket is connected to.

2. FreeBSD에서 청취 또는 열린 포트 나열

-l 플래그와 함께 실행되는 sockstat 명령은 네트워킹 스택에서 열린 모든 청취 소켓과 시스템에서 일종의 로컬 데이터 처리와 관련된 모든 열린 유닉스 도메인 소켓 또는 명명 된 파이프를 표시합니다.

# sockstat -l

3. FreeBSD에서 IPv4 개방 포트 나열

IPv4 프로토콜에 대해서만 열려있는 모든 소켓을 표시하려면 아래 예제에 제안 된대로 -4 플래그와 함께 명령을 실행하십시오.

# sockstat -4

4. FreeBSD에서 IPv6 개방 포트 나열

IPv4 버전과 마찬가지로 아래와 같이 명령을 실행하여 IPv6 전용으로 열린 네트워크 소켓을 표시 할 수도 있습니다.

# sockstat -6

5. FreeBSD에서 TCP 또는 UDP 개방 포트 나열

TCP 또는 UDP와 같은 지정된 네트워크 프로토콜만을 기반으로 네트워크 소켓을 표시하려면 -P 플래그와 프로토콜의 인수 이름을 차례로 사용합니다.

프로토콜 이름은/etc/protocols 파일의 내용을 검사하여 찾을 수 있습니다. 현재 ICMP 프로토콜은 sockstat 도구에서 지원되지 않습니다.

# sockstat -P tcp
# sockstat -P udp

두 프로토콜을 모두 연결하십시오.

# sockstat –P tcp,udp

6. TCP 및 UDP 특정 포트 번호 나열

로컬 또는 원격 포트 번호를 기반으로 모든 TCP 또는 UDP IP 열린 소켓을 표시하려면 아래 스크린 샷과 같이 아래 명령 플래그 및 구문을 사용합니다.

# sockstat -P tcp -p 443             [Show TCP HTTPS Port]
# sockstat -P udp -p 53              [Show UDP DNS Port] 
# sockstat -P tcp -p 443,53,80,21    [Show Both TCP and UDP]

7. FreeBSD에서 열린 포트와 연결된 포트 목록

열려 있고 연결된 모든 소켓을 표시하려면 -c 플래그를 사용하십시오. 아래 샘플과 같이 명령을 실행하여 모든 HTTPS 연결 소켓 또는 모든 TCP 연결 소켓을 나열 할 수 있습니다.

# sockstat -P tcp -p 443 -c
# sockstat -P tcp -c

8. FreeBSD에서 네트워크 수신 포트 나열

수신 상태에서 열린 모든 TCP 소켓을 나열하려면 아래 예와 같이 -l -s 플래그를 추가합니다. 비 연결 프로토콜이기 때문에 UDP는 연결 상태에 대한 정보를 유지하지 않습니다.

UDP 개방 소켓은 상태를 사용하여 표시 할 수 없습니다. udp 프로토콜은 데이터를 송수신하는 데 데이터 그램을 사용하고 연결 상태를 결정하는 내장 메커니즘이 없기 때문입니다.

# sockstat -46 -l -s

9. 유닉스 소켓 및 명명 된 파이프 나열

아래 이미지와 같이 -u 플래그를 사용하여 sockstat 명령에 의해 명명 된 파이프와 같은 다른 형태의 로컬 프로세스 간 통신뿐 아니라 Unix 도메인 소켓을 표시 할 수 있습니다.

# sockstat -u

10. FreeBSD에서 응용 프로그램에 의해 열린 포트 나열

Sockstat 명령 출력은 특정 응용 프로그램이나 명령에 의해 열린 포트 목록을 표시하기 위해 grep 유틸리티를 통해 필터링 될 수 있습니다.

Nginx 웹 서버와 관련된 모든 소켓을 나열하려는 경우 다음 명령을 실행하여 작업을 수행 할 수 있습니다.

# sockstat -46 | grep nginx

Nginx 웹 서버와 연결된 연결된 소켓 만 표시하려면 다음 명령을 실행하십시오.

# sockstat -46 -c| grep nginx

11. HTTPS 연결 프로토콜 나열

아래 명령을 실행하여 각 연결 상태와 함께 HTTPS 프로토콜과 관련된 모든 연결된 소켓을 나열 할 수 있습니다.

# sockstat -46 -s -P TCP -p 443 -c

12. HTTP 원격 소켓 나열

HTTP 프로토콜과 관련된 모든 원격 소켓을 나열하려면 다음 명령 조합 중 하나를 실행할 수 있습니다.

# sockstat -46 -c | egrep '80|443' | awk '{print $7}' | uniq -c | sort -nr
# sockstat -46 -c -p 80,443 | grep -v ADDRESS|awk '{print $7}' | uniq -c | sort -nr

13. IP 주소별로 가장 높은 HTTP 요청 찾기

각 원격 IP 주소에서 요청한 HTTP 연결 수를 확인하려면 아래 명령을 실행하십시오. 이 명령은 웹 서버가 일종의 DDOS 공격을 받고 있는지 확인하려는 경우 매우 유용 할 수 있습니다. 의심스러운 경우 요청 비율이 가장 높은 IP 주소를 조사해야합니다.

# sockstat -46 -c | egrep '80|443' | awk '{print $7}' | cut -d: -f1 | uniq -c | sort –nr

14. DNS 개방 소켓 나열

TCP 전송 프로토콜을 통해 내부 클라이언트에 서비스를 제공하기 위해 구내에서 캐싱 및 전달 DNS 서버를 구성했고 모든 소켓 목록을 표시하려는 경우
\n리졸버에 의해 열린 각 소켓 연결 상태와 함께 다음 명령을 실행합니다.

# sockstat -46 -P tcp –p 53 -s

15. 로컬 도메인에서 TCP DNS 쿼리

네트워크에 DNS 트래픽이없는 경우 다음 dig 명령어를 실행하여 로컬 머신의 콘솔에서 TCP 소켓에 대한 DNS 쿼리를 수동으로 트리거 할 수 있습니다. 그런 다음 위의 명령을 실행하여 모든 리졸버 소켓을 나열합니다.

# dig +tcp  www.domain.com  @127.0.0.1

그게 다야! "netstat 및 lsof 명령 줄 유틸리티와 함께 sockstat 명령 줄은 네트워크 정보를 수집하고 FreeBSD 네트워킹 스택 및 네트워킹 관련 프로세스 및 서비스의 여러 측면 문제를 해결하는 데 사용되는 강력한 유틸리티입니다.

Linux에서 FreeBSD sockstat 명령에 상응하는 부분은 netstat 또는 새로운 ss 명령으로 표시됩니다. 믿거 나 말거나 sockstat 유틸리티를 기반으로 Android OS 용으로 개발 된 유사한 응용 프로그램 인 SockStat – Simple Netstat GUI를 찾을 수 있습니다.