서비스가 ipv4 및 ipv6에서 수신 대기 중인지 확인하는 방법은 무엇입니까?

서비스가 ipv4 및 ipv6에서 수신 대기 중인지 확인하는 방법은 무엇입니까?

https 서비스가 IPv6와 IPv4 모두에서 수신 대기하는지 확인하고 싶습니다.

그리고 브라우저를 통해 URL에 액세스할 때 요청이 IPv4 또는 IPv6에서 제공되는지 알고 싶습니다.

답변1

당신은 그것을 사용할 수 있습니다 netstat:

# netstat -tlnp | grep httpd
# netstat -tlnp | grep apache
# netstat -tlnp | grep nginx
# netstat -tlnp | grep ...

그런 다음 각 IP 프로토콜 버전(tcp 및 tcp6)에 대해 하나의 행이 있는지 확인합니다.

#!/bin/bash

ns=$(netstat -tlnp | grep httpd)

if grep 'tcp ' <<< "$ns" >/dev/null; then
    echo "httpd has a listening IPv4 socket."
fi

if grep 'tcp6 ' <<< "$ns" >/dev/null; then
    echo "httpd has a listening IPv6 socket."
fi

netstat루트에 속한 프로세스(예: 기본 Apache 프로세스)를 보려면 루트 권한이 필요합니다. netstat표준 사용자로 사용 하려면 이 -p옵션을 제거하고 grep대신 IP와 포트를 전달하십시오. 예를 들어:

$ netstat -tln | grep '0.0.0.0:80'
$ netstat -tln | grep '127.0.0.1:80'
$ netstat -tln | grep '::1:80'

이 경우 찾고 있는 IP가 이미 찾고 있는 정보를 제공하므로 다시 열거 나 다시 grep열 필요가 없습니다 . 127.0.0.1 또는 0.0.0.0을 찾아야 하는지 여부는 웹 서버 구성에 따라 다릅니다.tcptcp6grep

답변2

lsof또한 매우 유용합니다.

nginx다음과 같이 각각 IPv4 및 IPv6를 사용하여 모든 수신 주소와 설정된 연결을 볼 수 있습니다 (루트로 실행).

lsof -c nginx -a -i4
lsof -c nginx -a -i6

v4 및 v6을 포함하여 클라이언트 호스트의 Google Chrome에 대한 모든 연결을 표시합니다.

lsof -c chrome -a -i

관련 정보