데몬이 어떤 인터페이스에서 수신하고 있는지 확인하는 방법?


27

예 : sshd는 wlan0에서만 수신하도록 구성되어 있습니다. 그래서. sshd_config를 확인하는 것 외에도 데몬이 어떤 인터페이스를 수신하고 있는지 확인할 수 있습니까? netstat가 할 수 있습니까? 방법? (OS : openwrt 또는 Scientific Linux 또는 openbsd)

최신 정보:

sshd가 인터페이스로 제한 될 수 있다고 생각했지만 ... (192.168.1.5는 wlan0에 있습니다 ...)

# grep ^ListenAddress /etc/ssh/sshd_config 
ListenAddress 192.168.1.5:22
# 
# lsof -i -n -P
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd      23952 root    3u  IPv4 1718551      0t0  TCP 192.168.1.5:22 (LISTEN)
#
# ss -lp | grep -i ssh
0      128              192.168.1.5:ssh                           *:*        users:(("sshd",23952,3))
# 
# netstat -lp | grep -i ssh
tcp        0      0 a.lan:ssh                   *:*                         LISTEN      23952/sshd          
#

답변:


37

( ipopenwrt에 패키지를 설치해야 할 수도 있습니다 (v12 / 태도 조정)

ifconfig / netstat 등은 더 이상 사용되지 않는 것으로 간주 되므로 (루트로) 사용해야합니다

ss -nlput | grep sshd

문자열을 포함하는 실행중인 프로그램 sshd이 청취 하는 TCP / UDP 소켓을 표시

  • -n
    이름 확인 포트 없음
  • -l
    청취 소켓 만
  • -p
    프로세스를 듣고 보여주기
  • -u
    UDP 소켓 표시
  • -t
    TCP 소켓 표시

그런 다음 다음과 같은 목록을 얻습니다.

tcp    LISTEN     0      128                    *:22                    *:*      users:(("sshd",3907,4))
tcp    LISTEN     0      128                   :::22                   :::*      users:(("sshd",3907,3))
tcp    LISTEN     0      128            127.0.0.1:6010                  *:*      users:(("sshd",4818,9))
tcp    LISTEN     0      128                  ::1:6010                 :::*      users:(("sshd",4818,8))

흥미로운 것은 IP 주소와 포트의 조합을 보여주는 5 번째 열입니다.

  1. *:22
    사용 가능한 모든 IPv4 주소에서 포트 22에서 청취
  2. :::22
    사용 가능한 모든 IP 주소에서 포트 22를 청취하십시오 (IP는 RFC 6540에 따라 IPv6이므로 IPv6을 쓰지 않습니다 )
  3. 127.0.0.1:6010
    IPv4 주소 127.0.0.1 (localhost / loopback) 및 포트 6010에서 청취
  4. ::1:6010
    IP 주소 :: 1 (0 : 0 : 0 : 0 : 0 : 0 : 0 : 1, 전체 표기법, 로컬 호스트 / 루프백) 및 포트 6010에서 수신

그런 다음 어떤 인터페이스에 IPv4 주소가 있는지 알고 싶습니다 (1을 포함).

ip -4 a
# or "ip -4 address"
# or "ip -4 address show"

또는 IP 주소 (2를 커버하기 위해)

ip -6 a
# or "ip -6 address
# or "ip -6 address show

(IP ( -6) 또는 IPv4 ( -4) 옵션을 추가하지 않으면 둘 다 표시됩니다)

예를 들어 127.0.0.1다른 IP / IPv4 주소 를 출력하고 검색하는 모습을 볼 수도 있습니다.

# here a demo where i show all addresses of the device "lo" (loopback)
ip a show dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

로 시작하는 라인 inetinet6이러한 IP를이 인터페이스에 바인딩되는 쇼, 당신은 인터페이스 당이 라인의 많은이있을 수 있습니다 :

he-ipv6: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN
    link/sit 192.0.2.1 peer 192.0.2.3
    inet6 2001:db8:12::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 2001:db8::2/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::1111:1111/128 scope link
       valid_lft forever preferred_lft forever

그리고 스크립트에서 :

address="127.0.0.1"
for i in $(grep ':' /proc/net/dev | cut -d ':' -f 1 | tr -d ' ') ; do
        if $(ip address show dev $i | grep -q "${address}") ; then
                echo "${address} found on interface ${i}"
        fi
done

( "127.0.0.1"교체)


당신은 데몬이 IP 주소에 의해서만 결정될 수 있기 때문에 어떤 인터페이스에서 수신하고 있는지를 결정하는 정확한 방법이 없다는 것을 의미합니까?
gasko peter

네 맞습니다. 당신 (또는 나는) 내가 전에 단계를 수행한다고 게시 한 스크립트를 확장 할 수 있습니다 ...
Oluf Lorenzen

1
SO_BINDTODEVICE는 어떻습니까?
Pavel Šimerda

19

사용 lsof(루트로) :

# lsof -i -n -P
COMMAND    PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd      3028        root    3u  IPv4   7072      0t0  TCP *:22 (LISTEN)
sshd      3028        root    4u  IPv6   7074      0t0  TCP *:22 (LISTEN)

iproute2'들 ss도 (루트로),이 작업을 수행 할 수 있습니다 :

# ss -lp
State      Recv-Q Send-Q      Local Address:Port          Peer Address:Port   
LISTEN     0      128                    :::ssh                     :::*        users:(("sshd",3028,4))
LISTEN     0      128                     *:ssh                      *:*        users:(("sshd",3028,3))

... 그리고 마지막으로 netstat(루트로서) :

# netstat -lp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:ssh                   *:*                     LISTEN      3028/sshd  

3
구체적으로, *:ssh또는 0.0.0.0:22와일드 카드 인터페이스 (즉, 모두)에서 수신 대기 중임을 의미합니다. 특정 인터페이스에서 듣고있는 것 host-eth1:ssh또는 10.0.0.4:22의미가있는 것
쓸모없는

잠깐만 .. 나는 이것이 정답이라고 생각했다. : D, 아니, 거기에 인터페이스가 없다. 프로그램이 주어진 인터페이스에서만 듣고 있다는 것을 어떻게 알 수 있는가? 또는이 질문에 대한 해결책이 없습니까? : O
gasko peter

@gaskopeter 당신은 IP 주소 에서 ( 192.168.1.5또는 a.lan질문에) 인터페이스를 볼 수 있습니다 . *이 장소에 있으면 모든 인터페이스 *:ssh에서 수신 대기합니다 ( sr_ 's answer).
Philipp Wendler

@Useless : 이것은 BSD 시스템에서만 적용됩니다.
BatchyX

@BatchyX 어떻게 그렇게? 적어도 쓸모없는 리눅스와 데비안에서 뭐라고 말했는지 알 수 있습니다.
x-yuri

9

내가 아는 한, Finkregh의 솔루션이 잘 작동하는 BSD 시스템을 제외하고는 할 수 없습니다. 대부분의 응용 프로그램은 IP 주소에 바인딩 된 경우에도 모든 인터페이스에서 수신하기 때문에 가능할 수도 있지만 신경 쓰지 않아도됩니다.

Linux (및 openwrt)에서 응용 프로그램이 특정 인터페이스에서만 수신 할 수있는 유일한 방법은 SO_BINDTODEVICE소켓 옵션입니다. OS마다 다르기 때문에 실제로 이것을 지원하는 응용 프로그램은 거의 없습니다. 패킷 소켓을 사용하지만 DHCP 서버와 같은 저수준 프로토콜에 사용됩니다.

취약한 호스트 모델을 사용하는 Linux에서는 모든 응용 프로그램이 소켓을 IP 주소에 바인딩 할 때도 기본적으로 모든 인터페이스를 수신합니다. 127.0.0.1에 바인딩 할 때 유일한 예외는 응용 프로그램이 lo인터페이스 에서만 수신하도록합니다 .

잘 들었습니다 : 두 개의 다른 IP 주소 (예 : 192.0.2.1 및 198.51.100.1 )를 가진 두 개의 인터페이스 (예 : eth0eth1)가 있고 응용 프로그램이 192.0.2.1에서 바인딩하도록 지시하면 응용 프로그램은 여전히 ​​수신 대기합니다. 두 인터페이스를 모두 지원하지만 대상 IP가 192.0.2.1 인 경우에만 응답합니다. 따라서 라우팅 테이블이 적절하게 정의 된 경우 인터페이스의 누군가가 인터페이스의 192.0.2.1 주소 (198.51.100.1이 아닌)를 통해 애플리케이션에 액세스하여 애플리케이션에 액세스 할 수 있습니다.eth0eth1eth1eth1

Linux에서 IP 주소에 바인딩하는 것이 네트워크 인터페이스에 바인딩하는 것과 완전히 같다고 가정합니다. 방해가되는 경우 정책 라우팅 및 / 또는을 사용하십시오 iptables.


-1

또한 netstat를 사용하지만 특정 인수는 다음과 같습니다.

netstat -lp -i wlan0

1
이 명령의 출력을 조금 더 설명해 주시겠습니까? : D
gasko peter

솔직히 모르겠습니다. 해야 했어요 man netstat. 내가 제안하는 차이점은 확인하려는 인터페이스를 명시 적으로 지정하기 위해 실행중인 "쿼리"를 변경하는 것입니다.
frogstarr78

"NETSTAT -lp -i wlan0"와 "에서 netstat -i"내 우분투 시스템에 동일한 응답 줄
브루스 바넷

1
netstat -i포트를 수신하지, 인터페이스를 나열합니다, -1 현실을 반영하지 않습니다 답변
미코 Rantalainen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.