क्या दो अनुप्रयोग एक ही पोर्ट को सुन सकते हैं?


283

क्या एक ही मशीन पर दो एप्लिकेशन एक ही पोर्ट और आईपी एड्रेस से जुड़ सकते हैं? इसे एक कदम आगे बढ़ाते हुए, क्या एक ऐप एक निश्चित आईपी और दूसरे रिमोट आईपी से आने वाले अनुरोधों को सुन सकता है? मुझे पता है कि मेरे पास एक ऐसा अनुप्रयोग हो सकता है जो समान व्यवहार करने के लिए दो थ्रेड्स (या कांटे) शुरू करता है, लेकिन क्या दो अनुप्रयोगों में कुछ भी समान नहीं हो सकता है?


2
कई सॉकेट्स के साथ पते / बंदरगाहों के पुन: उपयोग पर एक अच्छे विस्तृत उत्तर के लिए: stackoverflow.com/questions/14388706/…
Bjarke Freund-Hansen

जवाबों:


248

ओएस क्या माना जा रहा है, इसके आधार पर उत्तर भिन्न होता है। हालांकि सामान्य तौर पर:

टीसीपी के लिए, नहीं। आप एक समय में एक ही पोर्ट पर एक ही एप्लीकेशन सुन सकते हैं। अब यदि आपके पास 2 नेटवर्क कार्ड हैं, तो आप पहले आईपी पर एक आवेदन सुन सकते हैं और दूसरे आईपी पर उसी पोर्ट नंबर का उपयोग कर सकते हैं।

यूडीपी (मल्टीकास्ट) के लिए, कई एप्लिकेशन एक ही पोर्ट की सदस्यता ले सकते हैं।

संपादित करें: चूंकि लिनक्स कर्नेल 3.9 और बाद में, एक ही पोर्ट को सुनने वाले कई एप्लिकेशन का समर्थन SO_REUSEPORTविकल्प का उपयोग करके जोड़ा गया था । अधिक जानकारी इस lwn.net लेख पर उपलब्ध है


22
"एक ही पोर्ट पर एक एप्लिकेशन सुनना" यही कारण है कि पोर्ट मौजूद हैं - बिना संघर्ष के नेटवर्क को साझा करने के लिए कई अनुप्रयोगों को अनुमति देने के लिए।
S.Lott

46
प्रति आईपी पते पर प्रति पोर्ट एक श्रोता। एक अन्य नेटवर्क इंटरफ़ेस जोड़ना एक दूसरा आईपी पता प्राप्त करने का एक तरीका है। आपका मंच संभवतः वर्चुअल इंटरफेस का समर्थन करता है जो एक भौतिक नेटवर्क कार्ड के साथ दो आईपी पते प्राप्त करने का एक और तरीका है।
जॉन एम

7
हालाँकि मैं अब तक एक ही राय का था, यह पता चला है कि मैं एक ही आईपी और टीसीपी पोर्ट के लिए दो अलग-अलग प्रक्रियाओं को बांधने में सक्षम था! यह संभव है अगर आप Java में ServerSocket.setReuseAddress (true) को बाइंड करने से पहले सेट करते हैं। वास्तव में अप्रत्याशित व्यवहार।
यूजेन

7
(1) आपके उत्तर का वास्तविक अर्थ है 'टीसीपी के लिए, हां, बशर्ते ...' (2) मल्टीकास्ट यूडीपी पोर्ट शेयरिंग के लिए एक पूर्व शर्त नहीं है, लेकिन SO_REUSEADDR है।
लोर्ने का

12
यूडीपी (मल्टीकास्ट) के लिए, कई एप्लिकेशन एक ही पोर्ट की सदस्यता ले सकते हैं। यदि ग्राहक से एक पैकेट आया है, तो उसे कौन सा एप्लिकेशन प्राप्त होगा?
यांग जुवे

123

हां (टीसीपी के लिए) आपके पास एक ही सॉकेट पर दो प्रोग्राम हो सकते हैं, अगर प्रोग्राम ऐसा करने के लिए डिज़ाइन किए गए हैं। जब सॉकेट पहले प्रोग्राम द्वारा बनाया जाता है, तो सुनिश्चित करें SO_REUSEADDRकि आप से पहले सॉकेट पर विकल्प सेट है bind()। हालाँकि, यह वह नहीं हो सकता जो आप चाहते हैं। यह क्या होता है एक आने वाला टीसीपी कनेक्शन दोनों में से किसी एक कार्यक्रम के लिए निर्देशित किया जाएगा , इसलिए यह कनेक्शन की नकल नहीं करता है, यह सिर्फ दो कार्यक्रमों को आने वाले अनुरोध को सेवा देने की अनुमति देता है। उदाहरण के लिए, वेब सर्वर में पोर्ट 80 पर सभी सुनने वाली कई प्रक्रियाएँ होंगी, और O / S उस प्रक्रिया को एक नया कनेक्शन भेजता है जो नए कनेक्शन को स्वीकार करने के लिए तैयार है।

SO_REUSEADDR

bind()इस पोर्ट पर अन्य सॉकेट की अनुमति देता है , जब तक कि पोर्ट के पहले से ही सक्रिय श्रवण सॉकेट न हो। जब आप क्रैश के बाद अपने सर्वर को फिर से शुरू करने का प्रयास करते हैं, तो आप उन "पता पहले से उपयोग में आने वाले" त्रुटि संदेशों को प्राप्त कर सकते हैं।


1
टीसीपी + यूडीपी अब काम करता है (एक नया पर्याप्त कर्नेल दिया गया है)। मैंने लिंक को उत्तर में जोड़ा।
dpb

3
यह उत्तर तब तक सही नहीं है जब तक कि सभी सॉकेट अलग-अलग आईपी पते से बाध्य न हों, जिनमें से कोई भी INADDR_ANY नहीं है, या जब तक आप विंडोज पर नहीं हैं, जहां परिणाम अपरिभाषित है।
लोर्ने जूल का मार्किस

1
क्या आप इस बात का विस्तार कर सकते हैं कि डेटा उसी पोर्ट पर किसी विशिष्ट ऐप में कैसे जाता है? क्या यह सोचने के लिए कोई सुरक्षा चिंताएं हैं कि ऐप्स SO_REUSEADDR या SO_REUSEPORT का उपयोग कब करते हैं?
trusktr

@EJP क्या आप मेरी पिछली टिप्पणी पर भी नज़र डाल सकते हैं?
trusktr

3
SO_REUSEADDRनिश्चित रूप से आपको दो टीसीपी सॉकेट्स को एक ही समय में सुनने की स्थिति में नहीं होने देता है, कम से कम यूनिक्स पर। यह लगभग पाने के लिए है TIME_WAIT state: unixguide.net/network/socketfaq/4.5.shtml । यह विंडोज पर काम कर सकता है, लेकिन आपको इस बात की गारंटी नहीं है कि अनुरोध सही सर्वर तक पहुंच जाएगा)।
ब्रूनो

48

हाँ।

  1. एकाधिक सुनने वाले टीसीपी सॉकेट्स, जो सभी एक ही पोर्ट से जुड़े होते हैं, सह-अस्तित्व में हो सकते हैं, बशर्ते वे सभी अलग-अलग स्थानीय आईपी पते से बंधे हों। ग्राहक जिस किसी से भी ज़रूरत हो, उससे जुड़ सकते हैं। यह बाहर 0.0.0.0( INADDR_ANY)।

  2. एकाधिक स्वीकार किए गए सॉकेट सह-अस्तित्व में हो सकते हैं, सभी एक ही सुनने वाले सॉकेट से स्वीकार किए जाते हैं, सभी एक ही स्थानीय पोर्ट नंबर को सुनने वाले सॉकेट के रूप में दिखाते हैं।

  3. एक ही पोर्ट के लिए बाध्य सभी यूडीपी सॉकेट्स सभी सह-अस्तित्व प्रदान कर सकते हैं या तो (1) के रूप में एक ही स्थिति है या उनके पास SO_REUSEADDRबाध्यकारी से पहले सभी विकल्प हैं।

  4. टीसीपी पोर्ट और यूडीपी पोर्ट विभिन्न नामस्थानों पर कब्जा कर लेते हैं, इसलिए टीसीपी के लिए एक पोर्ट का उपयोग यूडीपी के लिए इसके उपयोग को नहीं रोकता है, और इसके विपरीत।

संदर्भ: स्टीवंस एंड राइट, टीसीपी / आईपी इलस्ट्रेटेड, वॉल्यूम II।


क्या आपके पास लिंक है? टीसीपी-यूडीपी सह-अस्तित्व का अवसर मेरा बहुत सवाल है। अग्रिम धन्यवाद :)
वुल्फ

1
@ भेड़िया बस कोशिश करो। यह सब सबूत है जो आपको वास्तव में चाहिए। मेरा उद्धरण स्टीवंस और राइट है: आप इससे बेहतर नहीं प्राप्त कर सकते।
लोर्न

1
प्रतिक्रिया के लिए धन्यवाद, मुझे और भी अधिक चौकस पढ़ने की आवश्यकता है। आपने पहले ही लिखा था कि यूडीपी और टीसीपी सह-अस्तित्व में आ सकते हैं
वुल्फ

47

सिद्धांत रूप में, नहीं।

यह पत्थर में नहीं लिखा है; लेकिन यह उसी तरह है जैसे सभी एपीआई लिखे जाते हैं: ऐप एक पोर्ट को खोलता है, इसे एक हैंडल मिलता है, और क्लाइंट कनेक्शन (या यूडीपी मामले में एक पैकेट) आने पर ओएस इसे सूचित करता है (उस हैंडल के माध्यम से)।

यदि OS ने दो ऐप्स को एक ही पोर्ट को खोलने की अनुमति दी है, तो यह कैसे पता चलेगा कि किसे सूचित करना है?

लेकिन ... इसके आसपास तरीके हैं:

  1. जैसा कि जेड ने उल्लेख किया है , आप एक 'मास्टर' प्रक्रिया लिख ​​सकते हैं, जो केवल वही होगी जो वास्तव में पोर्ट पर सुनती है और दूसरों को सूचित करती है, किसी भी तर्क का उपयोग करके यह ग्राहक अनुरोधों को अलग करना चाहती है।
    • लिनक्स और बीएसडी (कम से कम) पर आप किसी भी नेटवर्क से संबंधित मानदंड (शायद नेटवर्क ऑफ ओरिजिनल, या कुछ) के अनुसार 'दृश्यमान' पोर्ट से अलग-अलग लोगों (जहाँ ऐप सुन रहे हों) के पैकेटों को पुनर्निर्देशित कर सकते हैं। भार संतुलन के सरल रूप)।

37
iptables -m statistic --mode random --probability 0.5मजेदार है।
जेड स्मिथ

1
क्या वास्तव में "एक बंदरगाह खोलता है" को दर्शाता है? मैं वाक्य को समझता हूं, लेकिन क्या आप जानते हैं कि पोर्ट को खोलने और उसे संभालने के लिए सिस्टम वास्तव में क्या करता है? मुझे पता है कि जब आप टीसीपी के साथ एक पोर्ट खोलना चाहते हैं, तो आपको एक स्ट्रीम मिलती है और वह स्ट्रीम रिमोट के साथ आपका कनेक्शन है लेकिन मैं वेब पर खोजता हूं और बहुत अच्छी व्याख्या नहीं मिली है।
सैमुअल

4
@ शमूएल: एक पोर्ट (सर्वर मोड में) खोलने का मतलब है कि फाइल डिस्क्रिप्टर प्राप्त करना, और जब सिस्टम को उस पोर्ट नंबर पर SYN पैकेट मिलता है, तो SYN + ACK के साथ प्रतिक्रिया करता है और संबंधित फाइल डिस्क्रिप्टर पर एक ईवेंट बनाता है। एप्लिकेशन उस घटना के लिए एक स्वीकार () कॉल के साथ प्रतिक्रिया करता है, जो विशिष्ट स्ट्रीम से संबंधित एक नई फ़ाइल डिस्क्रिप्टर बनाता है, जो क्लाइंट से नए कनेक्शन प्राप्त करने के लिए मूल सर्वर डिस्क्रिप्टर को मुफ्त में छोड़ देता है
जेवियर

7
इस उत्तर को सही नहीं माना जा सकता। यह SO_REUSEADDR और SO_REUSEPORT दोनों के अस्तित्व को पूरी तरह से अनदेखा करता है।
लोर्ने का

@ जेवियर यह नहीं है। सर्वर अनुप्रयोग के दृष्टिकोण से एक बंदरगाह खोलना तब होता है जब आप सुनने वाले सॉकेट को बांधते हैं, या उस सॉकेट को बाँधते हैं जिस पर आप होने वाले हैं listen()। अधिक शायद सवाल यह है कि इसे फ़ायरवॉल में खोलने के बारे में है। यहाँ बहुत सारी त्रुटियाँ हैं, और सभी 7 वर्षों में ठीक नहीं हुईं। उत्तर एक ही पोर्ट नंबर के साथ अलग-अलग स्थानीय पते पर बाध्यकारी के मामले को भी छोड़ देता है। यह वास्तव में पूरी तरह से गलत है।
लोर्ने

27

हाँ निश्चित रूप से । जहाँ तक मुझे कर्नेल संस्करण से याद है 3.9 (संस्करण पर निश्चित नहीं) इसके बाद के लिए समर्थन SO_REUSEPORTशुरू किया गया था। SO_RESUEPORTठीक उसी पोर्ट और पते पर बाइंडिंग की अनुमति देता है, जब तक कि पहला सर्वर अपने सॉकेट को बाइंड करने से पहले इस विकल्प को सेट कर देता है।

यह टीसीपी और यूडीपी दोनों के लिए काम करता है । अधिक जानकारी के लिए लिंक देखें: SO_REUSEPORT

नोट : स्वीकृत उत्तर अब मेरी राय के अनुसार सही नहीं है।


2
पूर्णतया सत्य। अगर यह सच नहीं होता, तो विंडसर कैसे काम कर सकता था?
Staszek

5
@Staszek Wireshark बंदरगाहों को नहीं सुनता है। यह पैकेट स्तर पर संचालित होता है।
लोर्ने का मार्किस

ओह, यह समझ में आता है। वैसे भी, 2 ऐप द्वारा दो पोर्ट सुनना निश्चित रूप से संभव है।
स्टासजेक

18

नहीं, केवल एक आवेदन एक समय में एक बंदरगाह से जुड़ सकता है, और यदि बाध्य किया जाता है तो व्यवहार अनिश्चित है।

मल्टीकास्ट सॉकेट्स के साथ - जो आप चाहते हैं के पास कहीं भी ध्वनि की तरह है - एक से अधिक एप्लिकेशन पोर्ट पर बांध सकते हैं जब तक कि सॉकेट के प्रत्येक विकल्प में SO_REUSEADDR सेट हो।

आप एक "मास्टर" प्रक्रिया लिखकर इसे पूरा कर सकते हैं, जो सभी कनेक्शनों को स्वीकार और संसाधित करता है, फिर उन्हें आपके दो अनुप्रयोगों को सौंप देता है जिन्हें उसी बंदरगाह पर सुनने की आवश्यकता होती है। यह वह दृष्टिकोण है जो वेब सर्वर और ऐसे लेते हैं, क्योंकि कई प्रक्रियाओं को 80 सुनने की आवश्यकता होती है।

इससे परे, हम बारीकियों में शामिल हो रहे हैं - आपने टीसीपी और यूडीपी दोनों को टैग किया है, जो यह है? इसके अलावा, क्या मंच?


दोनों मेरे हित के हैं। मंच खिड़कियां है, लेकिन अगर लिनक्स के लिए उत्तर अलग है, तो यह जानना अच्छा होगा
nadiv

8
ऐसी कोई बात नहीं है कि आसा मल्टिकास्ट सॉकेट हो। यूडीपी सॉकेट हैं। मल्टीकास्ट SO_REUSEADDR के लिए एक पूर्व शर्त नहीं है।
लोर्ने का

3

आपके पास एक नेटवर्क इंटरफ़ेस के लिए एक पोर्ट पर एक आवेदन सुनना हो सकता है। इसलिए आपके पास हो सकता है:

  1. httpd दूर से सुलभ इंटरफेस पर सुनना, जैसे 192.168.1.1:80
  2. एक और डेमन पर सुनवाई 127.0.0.1:80

नमूना उपयोग मामला httpdलोड बैलेंसर या प्रॉक्सी के रूप में उपयोग करने के लिए हो सकता है ।


3

एक अन्य तरीका एक प्रोग्राम को एक पोर्ट में सुनने का उपयोग करता है जो ट्रैफ़िक (ssh, https, आदि) का विश्लेषण करता है। यह आंतरिक रूप से दूसरे पोर्ट पर रीडायरेक्ट करता है जिस पर "वास्तविक" सेवा सुन रहा है।

उदाहरण के लिए, लिनक्स के लिए, sslh: https://github.com/yrutschle/sslh


क्या खिड़कियों पर ऐसा कोई कार्यक्रम है? मुझे अपने स्थानीय IIS सर्वर और ActiveMQ दोनों ब्रोकर को पोर्ट 443
हर्वे लिन

3

जब आप एक टीसीपी कनेक्शन बनाते हैं, तो आप एक विशिष्ट टीसीपी पते से जुड़ने के लिए कहते हैं, जो एक आईपी पते (v4 या v6) का एक संयोजन है, जो आपके द्वारा उपयोग किए जा रहे प्रोटोकॉल के आधार पर) और एक पोर्ट है।

जब कोई सर्वर कनेक्शन के लिए सुनता है, तो यह कर्नेल को सूचित कर सकता है कि वह एक विशिष्ट आईपी पता और पोर्ट, यानी, एक टीसीपी पता, या होस्ट के प्रत्येक आईपी पते (आमतौर पर आईपी पते के साथ निर्दिष्ट) पर एक ही पोर्ट पर सुनना चाहता है। 0.0.0.0), जो प्रभावी रूप से बहुत सारे "टीसीपी पते" पर सुन रहा है (जैसे 192.168.1.10:8000,,127.0.0.1:8000 , आदि)

नहीं, आपके पास एक ही "टीसीपी पते" पर सुनने वाले दो एप्लिकेशन नहीं हो सकते हैं, क्योंकि जब कोई संदेश आता है, तो कर्नेल को यह पता कैसे होगा कि किस एप्लिकेशन को संदेश देना है?

हालाँकि, अधिकांश ऑपरेटिंग सिस्टम में आप एक ही इंटरफ़ेस पर कई IP पते सेट कर सकते हैं (जैसे, यदि आपके पास 192.168.1.10इंटरफ़ेस है, तो आप सेट भी कर सकते हैं 192.168.1.11, यदि नेटवर्क पर कोई और इसका उपयोग नहीं कर रहा है), और उन मामलों में आप 8000उन दो आईपी पतों में से प्रत्येक पर पोर्ट पर सुनने वाले अलग-अलग एप्लिकेशन हो सकते हैं ।


2

यदि दूरस्थ IP में से कम से कम एक पहले से ही जाना जाता है, तो स्थिर और आपके केवल एक ऐप से बात करने के लिए समर्पित है, आप इस पते से "साझा" स्थानीय पोर्ट को पुनर्निर्देशित करने के लिए iptables नियम (टेबल नेट, चेन PREROUTING) का उपयोग कर सकते हैं। कोई अन्य पोर्ट जहां उपयुक्त एप्लिकेशन वास्तव में सुनते हैं।


1

हां और ना। केवल एक एप्लिकेशन पोर्ट पर सक्रिय रूप से सुन सकता है। लेकिन वह एप्लिकेशन किसी अन्य प्रक्रिया से इसके कनेक्शन के नीचे हो सकता है। तो आपके पास एक ही पोर्ट पर काम करने की कई प्रक्रियाएँ हो सकती हैं।


@trusktr, मुझे लगता है कि उनका यह
warvariuc

1

हाँ।

इस लेख से:
https://lwn.net/Articles/542629/

नया सॉकेट विकल्प एक ही होस्ट पर एक ही पोर्ट पर बांधने के लिए कई सॉकेट की अनुमति देता है


1
अच्छा लिंक, हालांकि यह पंक्ति वहां नहीं लिखी गई है - SO_REUSEPORT विकल्प गैर-मानक है
साहिल सिंह

0

यदि अनुप्रयोगों द्वारा आप कई प्रक्रियाओं का मतलब है तो हाँ, लेकिन आम तौर पर नहीं। उदाहरण के लिए अपाचे सर्वर एक ही पोर्ट (आमतौर पर 80) पर कई प्रक्रियाएं चलाता है। यह वास्तव में पोर्ट से बाइंड होने की प्रक्रिया में से एक को नामित करके किया जाता है और फिर उस प्रक्रिया का उपयोग विभिन्न प्रक्रियाओं को सौंपने के लिए किया जाता है जो कनेक्शन स्वीकार कर रहे हैं।


0

आप एक ही नेटवर्क इंटरफेस पर एक ही पोर्ट के लिए दो एप्लिकेशन सुन सकते हैं।

निर्दिष्ट नेटवर्क इंटरफ़ेस और पोर्ट के लिए केवल एक सुनने वाला सॉकेट हो सकता है, लेकिन उस सॉकेट को कई अनुप्रयोगों के बीच साझा किया जा सकता है।

यदि आपके पास एक आवेदन प्रक्रिया में एक सुनने वाला सॉकेट है और आप forkउस प्रक्रिया को देखते हैं, तो सॉकेट विरासत में मिलेगा, इसलिए तकनीकी रूप से अब एक ही बंदरगाह को सुनने वाली दो प्रक्रियाएं होंगी।


0

मैंने निम्नलिखित के साथ कोशिश की है socat:

socat TCP-L:8080,fork,reuseaddr -

और भले ही मैंने सॉकेट से कनेक्शन नहीं बनाया है, मैं reuseaddrविकल्प के बावजूद, एक ही पोर्ट पर दो बार नहीं सुन सकता।

मुझे यह संदेश मिलता है (जिसकी मुझे पहले उम्मीद थी):

2016/02/23 09:56:49 socat[2667] E bind(5, {AF=2 0.0.0.0:8080}, 16): Address already in use

0

सिर्फ साझा करने के लिए जो @jnewton ने उल्लेख किया है। मैंने अपने मैक पर एक नगनेक्स और एक एम्बेडेड टॉमकैट प्रक्रिया शुरू की। मैं 8080 पर दोनों प्रक्रिया को देख सकता हूं।

LT<XXXX>-MAC:~ b0<XXX>$ sudo netstat -anp tcp | grep LISTEN
tcp46      0      0  *.8080                 *.*                    LISTEN     
tcp4       0      0  *.8080                 *.*                    LISTEN   

-2

संक्षिप्त जवाब:

यहां दिए गए जवाब से जा रहे हैं । आप एक ही आईपी पते और पोर्ट नंबर पर दो एप्लिकेशन सुन सकते हैं, इसलिए पोर्ट का एक लंबा यूडीपी पोर्ट है, जबकि दूसरा एक टीसीपी पोर्ट है।

स्पष्टीकरण:

पोर्ट की अवधारणा टीसीपी / आईपी स्टैक की ट्रांसपोर्ट परत पर प्रासंगिक है, इस प्रकार जब तक आप स्टैक के विभिन्न ट्रांसपोर्ट लेयर प्रोटोकॉल का उपयोग कर रहे हैं, तब तक आप एक ही समय में कई प्रक्रियाएं सुन सकते हैं। <ip-address>:<port> संयोजन ।

एक संदेह है कि लोगों के पास है अगर दो अनुप्रयोग एक ही <ip-address>:<port>संयोजन पर चल रहे हैं , तो एक दूरस्थ मशीन पर चलने वाला ग्राहक दोनों के बीच अंतर कैसे करेगा? यदि आप IP लेयर पैकेट हेडर ( https://en.wikipedia.org/wiki/IPv4#Header) देखते हैं ) को देखते हैं, तो आप देखेंगे कि प्रोटोकॉल को परिभाषित करने के लिए 72 से 79 बिट्स का उपयोग किया जाता है, इसी प्रकार भेद किया जा सकता है।

यदि आप एक ही टीसीपी <ip-address>:<port>संयोजन पर दो आवेदन करना चाहते हैं , तो उत्तर नहीं है (एक दिलचस्प अभ्यास दो वीएम लॉन्च किया जाएगा, उन्हें एक ही आईपी पता दें, लेकिन अलग-अलग मैक पते, और देखें कि क्या होता है - आप नोटिस करेंगे कि कुछ समय वीएम 1 को पैकेट मिलेगा, और अन्य समय में वीएम 2 को पैकेट मिलेगा - एआरपी कैश रिफ्रेश के आधार पर)।

मुझे लगता है कि एक ही <op-address>:<port>तरह के लोड बैलेंसिंग को हासिल करने के लिए आप दो एप्लिकेशन चला रहे हैं। इसके लिए आप विभिन्न बंदरगाहों पर एप्लिकेशन चला सकते हैं, और उनके बीच के ट्रैफ़िक को द्विभाजित करने के लिए आईपी टेबल नियम लिख सकते हैं।

@ User6169806 का उत्तर भी देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.