कैसे जांचें कि एक डेमॉन किस इंटरफेस पर सुन रहा है?


28

पूर्व .: एक sshd केवल wlan0 पर सुनने के लिए कॉन्फ़िगर किया गया है। इसलिए। Sshd_config की जाँच करने के अलावा मैं कैसे जाँच सकता हूँ कि एक डेमन किस अशुद्धि पर सुन रहा है? netstat कर सकते हैं? कैसे? (ओएस: ओपनरट या वैज्ञानिक लाइनक्स या ओपनबेस)

अद्यतन करें:

मुझे लगा कि 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

(आपको ipओपनरट पर पैकेज स्थापित करना पड़ सकता है (v12 / रवैया समायोजन)

ifconfig / netstat आदि को पदावनत माना जाता है , इसलिए आपको इसका उपयोग करना चाहिए (रूट के रूप में)

ss -nlput | grep sshd

टीसीपी / यूडीपी सॉकेट्स को दिखाने के लिए जिस पर एक रनिंग प्रोग्राम जिसमें स्ट्रिंग sshdहै वह सुन रहा है

  • -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))

दिलचस्प बात यह है कि 5 वां कॉलम आईपी पते और पोर्ट के संयोजन को दर्शाता है:

  1. *:22
    हर उपलब्ध IPv4 पते पर पोर्ट 22 पर सुनें
  2. :::22
    हर उपलब्ध आईपी पते पर पोर्ट 22 पर सुनें (मैं IPv6 नहीं लिखता, क्योंकि IP IPv6 प्रति RFC 6540 है )
  3. 127.0.0.1:6010
    IPv4 एड्रेस 127.0.0.1 (लोकलहोस्ट / लूपबैक) और पोर्ट 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"

या एक आईपी पता (कवर करने के लिए 2.)

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

(यदि आप आईपी के लिए विकल्प नहीं जोड़ते हैं -6) ( या आईपीवी 4 -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

इन आइपी से शुरू होने वाली रेखाएं inetऔर inet6दर्शाती हैं कि ये आईपी इस इंटरफ़ेस से बंधे हैं, आपके पास इन इंटरफ़ेसों में से कई लाइनें हो सकती हैं:

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" बदलें)


आपका मतलब है कि यह निर्धारित करने का कोई सटीक तरीका नहीं है कि एक डेमन किस इंटरफ़ेस पर सुन रहा है, क्योंकि यह केवल आईपी पते द्वारा निर्धारित किया जा सकता है?
गास्को पीटर

हाँ, सही है। आप (या मैं) उस स्क्रिप्ट का विस्तार कर सकते हैं जिसे मैंने पोस्ट किया है कि यह कदमों से पहले करेगी ...
ओलुफ़ लोरेनज़ेन

1
SO_BINDTODEVICE के बारे में क्या?
पावेल Paमेरदा

20

उपयोग 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इसका मतलब यह है कि यह विशिष्ट इंटरफ़ेस पर सुन रहा है
बेकार

एक मिनट प्रतीक्षा करें .. मुझे लगा कि यह अच्छा उत्तर है: डी, ​​लेकिन नहीं, इसमें कोई इंटरफ़ेस नहीं है .. मुझे यह कैसे पता चला कि एक प्रोग्राम केवल दिए गए इंटरफ़ेस पर सुन रहा है? या इस सवाल का कोई हल नहीं है? : ओ
गास्सो पीटर

@gaskopeter आप आईपी पते से इंटरफ़ेस देख सकते हैं जो दिखाया गया है ( 192.168.1.5या a.lanआपके प्रश्न में)। यदि *इस स्थान पर कोई है, तो यह सभी इंटरफेस ( *:sshsr_ के उत्तर में) को सुनता है ।
फिलिप वेंडलर

@ समर्थन: यह बीएसडी सिस्टम पर ही सही है।
बैचिएक्स

@ बैचिच ऐसा कैसे? मैं देख सकता हूं कि कम से कम आर्क लिनक्स और डेबियन पर बेकार क्या कहता है।
x- यूरी

9

जहाँ तक मुझे पता है, आप नहीं कर सकते (बीएसडी सिस्टम को छोड़कर, जहां फ़िन्क्र्रेग का समाधान ठीक काम करता है)। यह संभव हो सकता है लेकिन आप परवाह नहीं करते हैं, क्योंकि अधिकांश एप्लिकेशन हर इंटरफ़ेस पर सुनते हैं, यहां तक ​​कि जब एक आईपी पते के लिए बाध्य होता है।

लिनक्स (और ओपनरट) पर, किसी एप्लिकेशन को केवल एक निश्चित इंटरफ़ेस पर सुनने का एकमात्र तरीका SO_BINDTODEVICEसॉकेट विकल्प है। कुछ अनुप्रयोग वास्तव में इसका समर्थन करते हैं, क्योंकि यह ओएस विशिष्ट है। वह, या वे पैकेट सॉकेट का उपयोग करते हैं, लेकिन यह निम्न स्तर के प्रोटोकॉल (जैसे dhcp सर्वर) के लिए है।

लिनक्स पर, जो एक कमजोर होस्ट मॉडल का उपयोग करता है, हर एप्लिकेशन डिफ़ॉल्ट रूप से हर इंटरफेस पर सुनता है, यहां तक ​​कि एक आईपी पते पर सॉकेट को बांधते समय भी। एकमात्र अपवाद है जब 127.0.0.1 पर बाध्यकारी, जो यह सुनिश्चित करता है कि एप्लिकेशन केवल loइंटरफ़ेस पर सुनता है।

आप इसे सही सुना: आप दो इंटरफेस (कहना है, तो eth0और eth1) दो अलग IP पते के साथ, (के लिए 192.0.2.1 कहना eth0के लिए और 198.51.100.1 eth1) और आप, आवेदन अभी भी पर सुनेगा 192.0.2.1 पर बाँध के लिए एक आवेदन बता दोनों इंटरफेस, लेकिन केवल तभी जवाब देंगे जब गंतव्य आईपी 192.0.2.1 है। तो eth1इंटरफ़ेस पर कोई व्यक्ति , यदि इसकी रूटिंग टेबल को उचित रूप से परिभाषित किया गया है, तो इंटरफ़ेस पर 192.0.2.1 पते (लेकिन 198.51.100.1 के माध्यम से नहीं) के माध्यम से इसे एक्सेस करके अपने एप्लिकेशन को एक्सेस कर सकते हैं eth1

यह मानते हुए कि आईपी पते के लिए बाध्यकारी एक नेटवर्क इंटरफ़ेस के लिए बाध्यकारी के समान है, लिनक्स पर पूरी तरह से गलत है। यदि वह आपको परेशान करता है, तो नीति मार्ग और / या का उपयोग करें iptables


-1

नेटस्टैट के साथ भी लेकिन विशिष्ट तर्क हैं:

netstat -lp -i wlan0

1
क्या आप कृपया इस कमांड के आउटपुट को थोड़ी देर समझा सकते हैं? : डी
गैस्को पेटर

ईमानदारी से, मुझे नहीं पता। मुझे करना पड़ेगा man netstat। अंतर जो मैं सुझा रहा हूं वह "क्वेरी" को बदलने में है जो आप स्पष्ट रूप से उस इंटरफ़ेस को निर्दिष्ट करने के लिए चला रहे हैं जिसे आप जांचने में रुचि रखते हैं।
मेंढकप्रेम fro

"netstat -lp -i wlan0" और "netstat -i" मेरे उबंटू प्रणाली पर समान प्रतिक्रिया देते हैं
ब्रूस बार्नेट

1
netstat -iसूचियों को सूचीबद्ध करेगा, बंदरगाहों को नहीं सुन रहा है, -1 उत्तर के लिए जो वास्तविकता को प्रतिबिंबित नहीं करता है
मिको रान्टेलनें
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.