উত্স বন্দরগুলি কীভাবে নির্ধারিত হয় এবং আমি কীভাবে এটি একটি নির্দিষ্ট বন্দর ব্যবহার করতে বাধ্য করতে পারি


26

আমি যখন https://www.google.co.uk এ সংযুক্ত থাকি তখন এটি 216.58.198.228:443 এ পরিবর্তিত হয়। তারপরে আমার সাথে একটি সংযোগ খোলে [আমার আইপি ঠিকানা]: 63998।

আমার প্রশ্ন হল কীভাবে 99৩৯৯৮ বন্দরটি বেছে নেওয়া হয় এবং কীভাবে এটি 63৩৯৯৯ হতে বাধ্য করার উপায় রয়েছে?


9
এটির জন্য বলপূর্বক কোনও উপায় আছে 63999 আপনার কি এটি করার চেষ্টা করার কোনও কারণ আছে?
AL

1
আপনি যদি কোনও অ্যাপ্লিকেশন লিখছেন তবে আপনি যে কোনও (অব্যবহৃত) সোর্স পোর্ট খুলতে পারেন। তবে এটি একটি ভাল ধারণা নয় এবং আপনি কেন এটি চান তা পরিষ্কার নয়?
pjc50

6
@ pjc50 প্রকৃতপক্ষে, এই প্রশ্নটি দেখে মনে হচ্ছে এটি XY সমস্যা হতে পারে ।
দেব

1
গন্তব্য পোর্ট সংখ্যাগুলি গন্তব্য মেশিনে "স্থানীয়" হিসাবে শিরোনাম পরিবর্তনের জন্য "উত্স" বলার জন্য আমি একটি সম্পাদনা জমা দিয়েছি, তবে প্রাথমিক টিসিপি এসওয়াইএন প্যাকেটের উত্সটি উদ্বিগ্নভাবে প্রারম্ভিকের সংযোগটি
মন্টি হার্ডার

উত্তর:


39

স্থানীয় বন্দরগুলি কীভাবে নির্ধারিত হয়

টিফিসি বাস্তবায়ন সফ্টওয়্যার দ্বারা এফিমেরাল পোর্টস নামে একাধিক বন্দর নম্বর থেকে পোর্ট নম্বরটি বেছে নেওয়া হয় ।

পোর্ট নম্বর এবং ব্যবহৃত ব্যাপ্তিটি বেছে নেওয়ার সঠিক প্রক্রিয়াটি অপারেটিং সিস্টেম নির্ভর।


এটিকে 63999 হতে বাধ্য করার কোনও উপায় আছে কি?

এটি টিসিপি বাস্তবায়ন সফ্টওয়্যারটির কনফিগারেশন পরিবর্তন করে করা যেতে পারে।

বিভিন্ন অপারেটিং সিস্টেমের জন্য ইফেমেরাল পোর্টস রেঞ্জটি কনফিগার করার নির্দেশাবলী ইফেমেরাল পোর্ট রেঞ্জ পরিবর্তন করে পাওয়া যাবে ।

  • রেফারেন্সের জন্য নীচে এই উত্তরটিতে লিনাক্স এবং উইন্ডোজের নির্দেশাবলী অন্তর্ভুক্ত করা হয়েছে।

তবে উদাহরণস্বরূপ, কোনও একক বন্দরে সীমাবদ্ধতা সীমাবদ্ধ রাখা ভাল ধারণা নয় 63999

  • উইন্ডোজে আসলে এটি সম্ভব নয়:

    সেট করা যায় এমন পোর্টগুলির সর্বনিম্ন ব্যাপ্তি 255।


ইফেমেরাল বন্দর রেঞ্জ

একটি টিসিপি / আইপিভি 4 সংযোগ দুটি শেষ পয়েন্ট নিয়ে গঠিত এবং প্রতিটি শেষ পয়েন্টে একটি আইপি ঠিকানা এবং একটি পোর্ট নম্বর থাকে। অতএব, যখন কোনও ক্লায়েন্ট ব্যবহারকারী কোনও সার্ভার কম্পিউটারের সাথে সংযুক্ত হন, তখন একটি প্রতিষ্ঠিত সংযোগটি 4-টি-টি (সার্ভার আইপি, সার্ভার পোর্ট, ক্লায়েন্ট আইপি, ক্লায়েন্ট পোর্ট) হিসাবে বিবেচনা করা যেতে পারে।

সাধারণত চারটির মধ্যে তিনটি সহজেই পরিচিত - ক্লায়েন্ট মেশিন তার নিজস্ব আইপি ঠিকানা ব্যবহার করে এবং কোনও দূরবর্তী পরিষেবাতে সংযোগ করার সময়, সার্ভার মেশিনের আইপি ঠিকানা এবং পরিষেবা পোর্ট নম্বর প্রয়োজন are

যা তাত্ক্ষণিকভাবে স্পষ্ট হয় না তা হ'ল যখন কোনও সংযোগ স্থাপন করা হয় তখন সংযোগের ক্লায়েন্ট পাশটি একটি পোর্ট নম্বর ব্যবহার করে। কোনও ক্লায়েন্ট প্রোগ্রাম স্পষ্টভাবে একটি নির্দিষ্ট পোর্ট নম্বরের জন্য অনুরোধ না করা অবধি ব্যবহৃত পোর্ট নম্বরটি একটি সাময়িক পোর্ট নম্বর।

ইফেমেরাল বন্দরগুলি অস্থায়ী বন্দরগুলি মেশিনের আইপি স্ট্যাক দ্বারা নির্ধারিত হয় এবং এই উদ্দেশ্যে বন্দরগুলির একটি নির্ধারিত পরিসর থেকে নির্ধারিত হয়। সংযোগটি শেষ হয়ে গেলে, সাময়িক বন্দরটি পুনঃব্যবহারের জন্য উপলব্ধ থাকে, যদিও বেশিরভাগ আইপি স্ট্যাকগুলি এফেমেরাল বন্দরগুলির পুরো পুল ব্যবহার না করা অবধি এই পোর্ট নম্বরটি পুনরায় ব্যবহার করতে পারে না।

সুতরাং, যদি ক্লায়েন্ট প্রোগ্রামটি আবার সংযোগ করে, নতুন সংযোগের জন্য এটির জন্য পৃথক একটি সাময়িক পোর্ট নম্বর বরাদ্দ করা হবে।

সূত্র ইফেমেরাল বন্দর রেঞ্জ


ইফেমেরাল পোর্ট রেঞ্জ পরিবর্তন করা হচ্ছে

লিনাক্স:

লিনাক্স আপনাকে কেবলমাত্র ফাইলটি ব্যবহার করে ইফেমেরাল বন্দর পরিসরটি দেখতে ও পরিবর্তন করতে দেয় /proc/sys/net/ipv4/ip_local_port_range। উদাহরণস্বরূপ, এটি কার্নেল ২.২ সিস্টেমে ডিফল্ট কনফিগারেশন প্রদর্শন করে:

$ cat /proc/sys/net/ipv4/ip_local_port_range 
1024 4999

এটি পছন্দসই পরিসীমাতে পরিবর্তন করতে, আপনি (সুপারউজার হিসাবে) করতে পারেন:

# echo "49152 65535" > /proc/sys/net/ipv4/ip_local_port_range 

নোট করুন যে প্রতিবার সিস্টেম বুট হওয়ার পরে আপনার এটি করা দরকার, /etc/rc.local তাই আপনার প্রান্তটি সর্বদা ব্যবহৃত হয় এমন একটি সিস্টেম স্টার্টআপ স্ক্রিপ্টে একটি লাইন যুক্ত করার বিষয়ে নিশ্চিত হন ।

আরও মনে রাখবেন যে লিনাক্স ২.৪ কার্নেলটি 61১০০০০ এর মধ্যে 61২768 through এর সীমাটি ডিফল্ট করবে যদি পর্যাপ্ত কার্নেল মেমরি উপলব্ধ থাকে, সুতরাং নতুন লিনাক্স সিস্টেমে পরিসর পরিবর্তন করা প্রয়োজন হবে না।

পরিশেষে, এও নোট করুন যে আপনি ফাইল সিস্টেমটি sysctlব্যবহার না করে সেটিংস পরিবর্তন করতে ইন্টারফেসটি ব্যবহার করতে সক্ষম হতে পারেন /procsysctlপ্যারামিটারটির নাম "নেট.ipv4.ip_local_port_range"। /etc/sysctl.confআপনার যদি ফাইল থাকে তবে এটি সম্পাদনা করুন বা আপনি sysctlযদি এই পরামিতিটি ব্যবহার করে পরিবর্তন করতে চান তবে একটি স্টার্টআপ স্ক্রিপ্ট ম্যানুয়ালি কমান্ডটি চালান sysctl

উইন্ডোজ ভিস্তা / উইন্ডোজ সার্ভার ২০০৮ এবং আরও নতুন:

উইন্ডোজ ভিস্তা এবং উইন্ডোজ সার্ভার ২০০৮ হিসাবে মাইক্রোসফ্ট নলেজবেস আর্টিকেল 929851 অনুসারে উইন্ডোজ এখন ডিফল্টরূপে একটি বিশাল পরিসীমা (49152-65535) ব্যবহার করে । সেই একই নিবন্ধটিও দেখায় যে আপনি চাইলে কীভাবে পরিসীমা পরিবর্তন করতে পারেন, তবে বেশিরভাগ সার্ভারের জন্য এখন ডিফল্ট পরিসর যথেষ্ট।

সূত্র ইফেমেরাল বন্দর রেঞ্জ পরিবর্তন করে

নিম্নলিখিত netshকমান্ডগুলি ব্যবহার করে আপনি উইন্ডোজ ভিস্তা বা উইন্ডোজ সার্ভার ২০০৮ কম্পিউটার চালাচ্ছেন এমন একটি কম্পিউটারে গতিশীল পোর্ট পরিসরটি দেখতে পারেন :

netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp 

নোট:

  • প্রতিটি পরিবহণের জন্য এবং আইপি-র প্রতিটি সংস্করণের জন্য পরিসরটি আলাদাভাবে সেট করা থাকে।
  • পোর্ট পরিসীমা এখন সত্যিকারের একটি পয়েন্ট এবং একটি শেষ পয়েন্ট সহ একটি ব্যাপ্তি range
  • মাইক্রোসফ্ট গ্রাহকরা যারা উইন্ডোজ সার্ভার ২০০ running চলমান সার্ভারগুলি মোতায়েন করেন তাদের যদি অভ্যন্তরীণ নেটওয়ার্কে ফায়ারওয়াল ব্যবহার করা হয় তবে সার্ভারগুলির মধ্যে আরপিসি যোগাযোগের ক্ষেত্রে সমস্যা হতে পারে।
  • এইসব ক্ষেত্রে, আমরা প্রস্তাব করি আপনি ফায়ারওয়াল পুনরায় কনফিগার গতিশীল পোর্ট সীমার মধ্যে সার্ভারের মধ্যে ট্রাফিকের জন্য অনুমতি 49152 মাধ্যমে 65535
  • এই ব্যাপ্তিটি সুপরিচিত বন্দরগুলির পাশাপাশি রয়েছে যা পরিষেবা এবং অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয়।
  • বা, সার্ভার দ্বারা ব্যবহৃত পোর্ট পরিসর প্রতিটি সার্ভারে পরিবর্তন করা যেতে পারে।

আপনি netshনিম্নরূপ আদেশটি ব্যবহার করে এই সীমাটি সামঞ্জস্য করুন :

netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range

এই কমান্ডটি টিসিপি-র জন্য গতিশীল পোর্ট পরিসর নির্ধারণ করে। প্রারম্ভের বন্দরটি সংখ্যা, এবং বন্দরগুলির মোট সংখ্যা ব্যাপ্তি। নীচে নমুনা আদেশ রয়েছে:

netsh int ipv4 set dynamicport tcp start=10000 num=1000
netsh int ipv4 set dynamicport udp start=10000 num=1000
netsh int ipv6 set dynamicport tcp start=10000 num=1000
netsh int ipv6 set dynamicport udp start=10000 num=1000

এই নমুনা কমান্ডগুলি 10000 পোর্ট থেকে শুরু এবং পোর্ট 10999(1000 পোর্ট) এ শেষ হতে ডায়নামিক পোর্ট পরিসীমা সেট করে ।

নোট:

  • সেট করা যায় এমন পোর্টগুলির সর্বনিম্ন ব্যাপ্তি 255
  • সর্বনিম্ন শুরু হওয়া পোর্টটি সেট করা যেতে পারে 1025
  • সর্বাধিক শেষের পোর্ট (কনফিগার হওয়া সীমার উপর ভিত্তি করে) অতিক্রম করতে পারে না 65535
  • উইন্ডোজ সার্ভার 2003-এর ডিফল্ট আচরণের সদৃশ করতে, 1025স্টার্ট পোর্ট 3976হিসাবে ব্যবহার করুন এবং তারপরে টিসিপি এবং ইউডিপি উভয়ের জন্য সীমা হিসাবে ব্যবহার করুন । এর সূচনা পোর্ট 1025এবং এর শেষ পোর্টের ফলাফল 5000

উত্স মাইক্রোসফ্ট নলেজবেস নিবন্ধ 929851 :

উইন্ডোজ এক্সপি এবং আরও পুরানো:

পুরানো উইন্ডোজ অপারেটিং সিস্টেমের জন্য (উইন্ডোজ এক্সপি এবং আরও পুরানো), উইন্ডোজ তার সাময়িক বন্দর ব্যাপ্তির জন্য 4924 থেকে 4999 এর মধ্যে 24তিহ্যবাহী BSD পরিসর ব্যবহার করে। দুর্ভাগ্যক্রমে এটি প্রদর্শিত হয় যে আপনি কেবলমাত্র সাময়িক বন্দর ব্যাপ্তির উপরের সীমাটি সেট করতে পারেন। মাইক্রোসফ্ট নলেজবেস নিবন্ধ 196271 থেকে এখানে উদ্ধৃত তথ্য রয়েছে :

  • রেজিস্ট্রি সম্পাদক ( Regedt32.exe) শুরু করুন ।
  • রেজিস্ট্রিতে নিম্নলিখিত কীটি সনাক্ত করুন:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

  • "সম্পাদনা" মেনুতে "মান যুক্ত করুন" ক্লিক করুন এবং তারপরে নিম্নলিখিত রেজিস্ট্রি মান যুক্ত করুন:

    মান নাম: MaxUserPortতথ্য প্রকার: REG_DWORDমান: 65534(উদাহরণস্বরূপ)

    বৈধ ব্যাপ্তি: 5000-65534(দশমিক) ডিফল্ট: 0x1388(5000 দশমিক)

    বিবরণ: যখন কোনও অ্যাপ্লিকেশন সিস্টেম থেকে কোনও উপলব্ধ ব্যবহারকারী পোর্টকে অনুরোধ করে তখন এই প্যারামিটারটি ব্যবহার করা সর্বাধিক পোর্ট নম্বর নিয়ন্ত্রণ করে। সাধারণত, সাময়িক (অর্থাত্ স্বল্প-কালীন) বন্দরগুলি সমেত 1024এবং মানগুলির মধ্যে বরাদ্দ করা হয় 5000

  • প্রস্থান নিবন্ধন সম্পাদক।

দ্রষ্টব্য: এখানে আরও একটি প্রাসঙ্গিক কেবি নিবন্ধ রয়েছে ( 812873 ) যা আপনাকে একটি বর্ধনের পরিসীমা সেট করার অনুমতি দেওয়ার দাবি করে, যার অর্থ এই হতে পারে যে আপনি 1024-9999সাময়িক বন্দর পরিসর থাকতে পোর্টগুলি বাদ দিতে পারেন (উদাহরণস্বরূপ) 10000-65534। তবে, আমরা এটিকে কাজে লাগাতে পারিনি (অক্টোবর ২০০৪ হিসাবে)।

সূত্র ইফেমেরাল বন্দর রেঞ্জ পরিবর্তন করে


1
কমপক্ষে উইন্ডোগুলির জন্য মনে হচ্ছে পোর্ট রেঞ্জ সিস্টেম প্রশস্তভাবে সীমাবদ্ধ করা সম্ভব। বেশিরভাগ ক্ষেত্রে এটি সম্ভবত একটি খারাপ ধারণা, বিশেষত এটি একটি বন্দরে সীমাবদ্ধ করা হ'ল : কেবি 929291 দেখুন , উইন্ডোজ on- এ কমপক্ষে তালিকাবদ্ধ কমান্ডগুলি অন্তর্ভুক্ত রয়েছে
শেঠ

হ্যাঁ আমি এটি উল্লেখ করতে নারাজ যেহেতু ওপি তার ওএসের কথা উল্লেখ করে নি এবং আমি এন অপারেটিং সিস্টেমগুলি কভার করার উত্তরটি প্রসারিত করতে চাই না ...
ডেভিডপস্টিল

তুমি ঠিক সে কথা বলছ। সর্বোপরি প্রচুর অপারেটিং সিস্টেম রয়েছে। মূলত এই প্রশ্নের উত্তর দেওয়ার চেষ্টা করার সময় আমি কেবল হোঁচট খেয়েছি। আপনার উত্তরটি দ্রুততর হওয়ায় আমি কেবল ভেবেছিলাম এটি যুক্ত করব। এটি সত্যিই একটি ভাল উত্তর! :) কেবল এটিকে একটি ইঙ্গিত হিসাবে যুক্ত করেছেন যে কখনও কখনও পুনরায় প্রোগ্রামিংয়ের পরিবর্তে কনফিগারেশন পরিবর্তন করা যথেষ্ট (সম্ভবত আমার বোঝার চেয়ে আলাদা me আমার কাছে যা পুনরায় সংকলনের মতো বলে মনে হয়)।
শেঠ

1
আসলে, লিনাক্সেও এটি খুব সহজ: কেবল "49152 65535"> / proc / sys / নেট / ipv4 / ip_local_port_range প্রতিধ্বনি করুন । এটি এত সহজ যে এটি প্রতি-আদেশের ভিত্তিতে করা যায়।
মারিয়াসমাতুটিয়

2
ইফেমেরাল পোর্ট পরিসীমা পরিবর্তনের পরিবর্তে অ্যাপ্লিকেশনটি কল bindকরার আগে সিস্টেম কল করে ফেলা ভাল connect। কিছু অ্যাপ্লিকেশনগুলির কাছে এটি করার বিকল্প রয়েছে, অন্যান্য অ্যাপ্লিকেশনগুলিতে তা নেই।
ক্যাস্পারড

9

ডেভিড পস্টিলের উত্তর পুরোপুরি সঠিক। আমি এটি যুক্ত করতে চাই, এটি জোর দিয়েই যে লিনাক্সের ইফেমেরাল বন্দর পরিসরটি পরিবর্তন করা এত সহজ, যে ওপির একটি ইতিবাচক উত্তর রয়েছে।

আপনি নীচে ইপিআর পরিবর্তন করুন:

echo "40000 60000" > /proc/sys/net/ipv4/ip_local_port_range 

এবং আপনি নিম্নলিখিত স্ক্রিপ্ট সহ 50000 পোর্ট (উদাহরণ হিসাবে) নির্বাচন করতে পারেন:

OLD_RANGE=$(cat /proc/sys/net/ipv4/ip_local_port_range)
MY_PORT=50000
echo "$MY_PORT $MY_PORT" > /proc/sys/net/ipv4/ip_local_port_range
sudo -u SomeUser SomeApplication  & 
echo $OLD_RANGE" > /proc/sys/net/ipv4/ip_local_port_range 

এখানে একটি সাবধানবাণী: যেহেতু পরিসীমাটিতে একটি একক বন্দর রয়েছে, অন্য কোনও অ্যাপ্লিকেশন এটিকে উপরের তৃতীয় এবং চতুর্থ লাইনের সম্পাদনের মধ্যে আপনার কাছ থেকে ছিনিয়ে নিতে পারে; এছাড়াও, যদি কোনও রেসের শর্ত না থাকে তবে আপনি কোনও বৃহত ইপিআর পুনরুদ্ধার না করা পর্যন্ত আপনি অন্যান্য সমস্ত অ্যাপ্লিকেশনকে পঙ্গু করে দেবেন, এ কারণেই আমি যত তাড়াতাড়ি সম্ভব আসল পরিসরটি পুনরুদ্ধার করব।

সুতরাং, যদি Ops 'অপারেটিং সিস্টেম লিনাক্স হয়েছে, উত্তর হত এটি সহজে সম্পন্ন করা যেতে পারে।

আশ্চর্যজনকভাবে, বিএসডিগুলিতে এটি এতটা সহজ নয়, যার কয়েকটিতে ইপিআরের জন্য রানটাইম কার্নেল সেটিংসও নেই। ম্যাকস এক্স, ফ্রিবিএসডি এবং ওপেনবিএসডি ফাইল /etc/sysctl.conf সংশোধন করা প্রয়োজন , তবে তাদের ইপিআরের জন্য আলাদা পছন্দ আছে।

ওএস এবং ওএস নির্বিশেষে, কিছু করা যেতে পারে তার অর্থ এইটি করা উচিত নয় : পৃথিবীতে আপনার এটির কী প্রয়োজন? আমি একক ব্যবহারের ক্ষেত্রে ভাবতে পারি না।


লিনাক্স উদাহরণের জন্য +1।
ডেভিডপস্টিল

হে হে। বিএসডি / ওএসের কার্নেলটি পুনরায় সংশোধন করা দরকার :)
ডেভিডপস্টিল

1
@ ডেভিডপস্টিল এটি একটি বড় বামার।
মারিউসমাতুটিয়

আপনার কোড উদাহরণে একটি ত্রুটি রয়েছে। আপনার টাইপ কাস্ট খুব ভুল জায়গায় প্রতিস্থাপিত হয়। অতিরিক্তভাবে এটি alচ্ছিক করা ভাল ধারণা হবে BIND_PORTযেমন কোডটি এখনও মূলটির মতো একইভাবে ব্যবহার করা যেতে পারে। আমি মনে করি htons(bind_port_env ? atoi(bind_port_env) : 0)সঠিক কাজ করবে।
কাস্পারড

1

এটি যোগ করার মতো যে লিনাক্স কার্নেলটিও রয়েছে

net.ipv4.ip_local_reserved_ports

গিঁট যা কিছুটা বিপরীত হয় তবে তবুও এটি খুব কার্যকর হতে পারে কারণ সেই উপায়ে আপনি পোর্টগুলির অন্যথায় ক্ষুদ্রতর পরিসরে নির্দিষ্ট পোর্ট (গুলি) খোলার পরিষেবাগুলির জন্য "একটি ছিদ্র" করতে পারেন।

ডক্স থেকে সংক্ষিপ্ত অংশ :

পরিচিত তৃতীয় পক্ষের অ্যাপ্লিকেশনগুলির জন্য সংরক্ষিত পোর্টগুলি নির্দিষ্ট করুন। এই পোর্টগুলি স্বয়ংক্রিয় পোর্ট অ্যাসাইনমেন্টগুলি ব্যবহার করবে না (যেমন কানেক্ট কল করার সময় () বা পোর্ট নম্বর 0 দিয়ে বাইন্ড ()। সুস্পষ্ট বন্দর বরাদ্দ আচরণ অপরিবর্তিত।

ইনপুট এবং আউটপুট উভয়ের জন্য ব্যবহৃত ফর্ম্যাটটি হ'ল রেঞ্জের কমা দ্বারা পৃথক করা তালিকা (উদাহরণস্বরূপ "1,2-4,10-10" পোর্ট 1, 2, 3, 4 এবং 10 এর জন্য)। ফাইলটিতে লেখা সমস্ত পূর্ববর্তী সংরক্ষিত পোর্টগুলি সাফ করে দেবে এবং ইনপুটটিতে দেওয়া একটি দিয়ে বর্তমান তালিকা আপডেট করবে।

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