কোন ইন্টারফেসে ডিমন শুনছে তা কীভাবে পরীক্ষা করবেন?


28

উদাহরণস্বরূপ: একটি sshd শুধুমাত্র wlan0 এ শুনতে কনফিগার করা হয়েছে। So. Sshd_config পরীক্ষা করা ছাড়াও আমি কীভাবে পরীক্ষা করতে পারি যে কোনও ডিমন কোন ইনারফেসে শুনছে? নেটস্ট্যাট এটা করতে পারে? কীভাবে? (ওএস: ওপেনর্ট বা বৈজ্ঞানিক লিনাক্স বা ওপেনবিএসডি)

হালনাগাদ:

আমি ভেবেছিলাম 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ওপেনওআরটিতে প্যাকেজটি ইনস্টল করতে হতে পারে (ভি 12 / দৃষ্টিভঙ্গি সামঞ্জস্য)

ifconfig / netstat কমান্ড ইত্যাদি বিবেচনা করা হয় অবচিত , তাই আপনি (root পরিচয়ে) ব্যবহার করা উচিত

ss -nlput | grep sshd

টিসিপি / ইউডিপি সকেটগুলি দেখানোর জন্য যার উপর স্ট্রিং রয়েছে এমন একটি চলমান প্রোগ্রাম sshdশুনছে

  • -n
    নামকরণের কোনও পোর্ট নেই
  • -l
    শুধুমাত্র শোনা সকেট
  • -p
    শোনা প্রক্রিয়া দেখান
  • -u
    ইউডিপি সকেট প্রদর্শন করুন
  • -t
    টিসিপি সকেট দেখান

তারপরে আপনি এইগুলির মতো একটি তালিকা তৈরি করবেন:

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

মজার বিষয় হ'ল ৫ ম কলাম যা আইপি ঠিকানা এবং পোর্টের সংমিশ্রণটি দেখায়:

  1. *:22
    প্রতিটি উপলব্ধ আইপিভি 4 ঠিকানায় পোর্ট 22 শুনুন
  2. :::22
    প্রতিটি উপলব্ধ আইপি ঠিকানায় 22 পোর্টে শুনুন (আমি আইপিভি 6 লিখি না, কারণ আইপিভি 6 প্রতি আরএফসি প্রতি IP406 )
  3. 127.0.0.1:6010
    আইপিভি 4 ঠিকানা 127.0.0.1 (লোকালহোস্ট / লুপব্যাক) এবং পোর্ট 6010 এ শুনুন
  4. ::1:6010
    আইপি ঠিকানাটি শুনুন: 1 (0: 0: 0: 0: 0: 0: 0: 1 সম্পূর্ণ স্বীকৃতিতে, লোকালহোস্ট / লুপব্যাক) এবং পোর্ট 6010

তারপরে আপনি জানতে চান কোন ইন্টারফেসের একটি আইপিভি 4 ঠিকানা রয়েছে (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বা অন্য কোনও আইপি / আইপিভি 4-ঠিকানা অনুসন্ধান করতে পারেন

# 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" প্রতিস্থাপন করুন)


আপনি বোঝাতে চেয়েছেন যে কোনও ডিমন কোন ইন্টারফেসে শুনছে তা নির্ধারণের সঠিক কোনও উপায় নেই কারণ এটি কেবলমাত্র আইপি ঠিকানা দ্বারা নির্ধারিত হতে পারে?
গ্যাসকো পিটার

হ্যাঁ, সঠিক আপনি (বা i) আমার পোস্ট করা স্ক্রিপ্টটি বাড়িয়ে দিতে পারে যে এটি আগে পদক্ষেপগুলি করবে ...
ওলুফ লোরেঞ্জেন

1
SO_BINDTODEVICE সম্পর্কে কী?
পাভেল Šimerda

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খুব (root পরিচয়ে) এটা করতে পারেন:

# 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এটা শোনার মানে নির্দিষ্ট ইন্টারফেসে
বেহুদা

এক মিনিট অপেক্ষা করুন .. আমি ভেবেছিলাম এটিই ভাল উত্তর: ডি কিন্তু না, এতে কোনও ইন্টারফেস নেই .. আমি কীভাবে জানতে পারি যে কোনও প্রোগ্রাম কেবল প্রদত্ত ইন্টারফেসে শুনছে? বা এই প্রশ্নের কোন সমাধান নেই? : ও
গ্যাসকো পিটার

@ ভাস্কোপিটার আপনি প্রদর্শিত আইপি ঠিকানা থেকে ইন্টারফেসটি দেখতে পাবেন যা ( 192.168.1.5বা a.lanআপনার প্রশ্নের মধ্যে রয়েছে)। যদি *এই জায়গায় কোনও স্থান থাকে, তবে এটি সমস্ত ইন্টারফেসে শুনবে ( *:sshsr_ এর উত্তরে)।
ফিলিপ উইন্ডার 14

@ ব্যবহারহীন: এটি কেবল বিএসডি সিস্টেমে সত্য।
BatchyX

@BatchyX কিভাবে? কমপক্ষে আর্ক লিনাক্স এবং ডেবিয়ানে ইউসলেস কী বলে তা আমি দেখতে পাচ্ছি।
এক্স-ইউরি 19

9

যতদূর আমি জানি, আপনি পারবেন না (বিএসডি সিস্টেমগুলি বাদে, যেখানে ফিংক্রেগের সমাধান ভাল কাজ করে)। এটি সম্ভব হতে পারে তবে আপনি পাত্তা দিচ্ছেন না, কারণ বেশিরভাগ অ্যাপ্লিকেশন আইপি ঠিকানার সাথে আবদ্ধ থাকা অবস্থায়ও প্রতিটি ইন্টারফেসে শুনবে।

লিনাক্সে (এবং ওপেনওআর্ট) কোনও অ্যাপ্লিকেশনটির কেবলমাত্র একটি নির্দিষ্ট ইন্টারফেসে শোনার একমাত্র উপায় হ'ল SO_BINDTODEVICEসকেট বিকল্প। কয়েকটি OS অ্যাপ্লিকেশনই এটি সমর্থন করে, কারণ এটি ওএস নির্দিষ্ট। এটি, বা তারা প্যাকেট সকেট ব্যবহার করে তবে এটি নিম্ন স্তরের প্রোটোকলের জন্য (ডিএইচসিপি সার্ভারের মতো)।

লিনাক্সে, যা একটি দুর্বল হোস্ট মডেল ব্যবহার করে, প্রতিটি অ্যাপ্লিকেশন প্রতিটি ইন্টারফেসে ডিফল্টরূপে শুনতে পায়, এমনকি আইপি ঠিকানায় সকেটকে বাঁধাইয়ের সময়ও। কেবলমাত্র ব্যতিক্রমটি 127.0.0.1 এ আবদ্ধ হওয়ার পরে, যা নিশ্চিত করে যে অ্যাপ্লিকেশনটি কেবল loইন্টারফেসে শুনবে ।

আপনি এটি সঠিক শুনেছেন: যদি আপনার দুটি পৃথক আইপি ঠিকানা সহ দুটি ইন্টারফেস (বলুন eth0এবং eth1) থাকে ((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। আমি যে পার্থক্যটি প্রস্তাব করছি তা হ'ল "ক্যোয়ারী" পরিবর্তন করার ক্ষেত্রে যা আপনি যাচাই করতে আগ্রহী ইন্টারফেসটি স্পষ্টভাবে উল্লেখ করতে চলেছেন।
ফ্র্যাগস্টায়ার 78

"নেটট্যাট -লপ-আই ওয়ালান0" এবং "নেটট্যাট-আই" আমার উবুন্টু সিস্টেমে একই প্রতিক্রিয়া দেয়
ব্রুস বার্নেট

1
netstat -iউত্তরগুলির জন্য ইন্টারফেসগুলি, শ্রবণকারী বন্দরগুলি তালিকাভুক্ত করবে -1 যা বাস্তবতার প্রতিফলন করে না
মিক্কো রেন্টালাইনেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.