
অবশ্যই, .NET কোর এবং একটি দূরবর্তী আইপি ঠিকানা পাওয়ার সমস্যা সম্পর্কে কথা বলে শুরু করা যাক।
.NET কোর হল একটি বিনামূল্যের, ক্রস-প্ল্যাটফর্ম, ওপেন-সোর্স ডেভেলপার প্ল্যাটফর্ম যা ওয়েব অ্যাপ এবং পরিষেবা সহ অনেক ধরনের অ্যাপ্লিকেশন তৈরি করে। যাইহোক, একটি .NET কোর অ্যাপ্লিকেশনে একটি দূরবর্তী আইপি ঠিকানা প্রাপ্ত করা কখনও কখনও একটি চ্যালেঞ্জ তৈরি করতে পারে। এটি গুরুত্বপূর্ণ কারণ ক্লায়েন্টের আইপি ঠিকানায় অ্যাক্সেস থাকা বর্ধিত লগিং, ব্যক্তিগতকৃত অভিজ্ঞতা এবং আরও অনেক কিছুর জন্য অনুমতি দেয়।
এটি সমাধান করার জন্য, আমরা .NET কোরের অন্তর্নির্মিত লাইব্রেরি দ্বারা প্রদত্ত HttpContext ব্যবহার করতে পারি।
সমাধান বাস্তবায়ন
আমরা কন্ট্রোলার পদ্ধতিতে HttpContext অ্যাক্সেস করে শুরু করি যেখানে আমাদের ক্লায়েন্টের আইপি প্রয়োজন। দ্য Http প্রসঙ্গ বস্তুতে একটি পৃথক HTTP অনুরোধ সম্পর্কে HTTP-নির্দিষ্ট তথ্য রয়েছে।
সর্বজনীন IAction ফলাফল সূচক()
{
var remoteIpAddress = HttpContext.Connection.RemoteIpAddress;
// অতিরিক্ত যুক্তি…
}
এই আপনি ক্লায়েন্ট পায় আইপি ঠিকানা. HttpContext.Connection.RemoteIpAddress পদ্ধতিটি দূরবর্তী ক্লায়েন্টের IP ঠিকানা প্রদান করে। যাইহোক, মনে রাখবেন যে এটি সর্বদা প্রত্যাশিত ফলাফল নাও দিতে পারে, বিশেষ করে যখন আপনার সার্ভার লোড ব্যালেন্সারের পিছনে থাকে বা ফরোয়ার্ড হেডার মিডলওয়্যার ব্যবহার করে।
কোডের একটি গভীর উপলব্ধি
প্রদত্ত C# কোডটি ব্যবহার করে Http প্রসঙ্গ অবজেক্ট, যা কন্ট্রোলারবেসের একটি সম্পত্তি এবং এতে HTTP অনুরোধ সম্পর্কে তথ্য রয়েছে। এতে হোস্টের তথ্য, পথের বিশদ বিবরণ এবং সমস্ত-গুরুত্বপূর্ণ সংযোগ সম্পত্তির মতো আইটেম অন্তর্ভুক্ত রয়েছে।
সংযোগ বৈশিষ্ট্য ConnectionInfo টাইপ থেকে, থেকে Microsoft.AspNetCore.Http. বৈশিষ্ট্যগুলি৷ নামস্থান অন্যান্য বৈশিষ্ট্যগুলির মধ্যে, এতে রয়েছে `RemoteIpAddress`, এমন একটি সম্পত্তি যা HTTP অনুরোধ থেকে IP ঠিকানা নিয়ে আসে।
যাইহোক, সার্ভার একটি লোড ব্যালেন্সার বা প্রক্সির পিছনে থাকতে পারে। এই মধ্যস্থতাকারীরা মূল HTTP অনুরোধের তথ্য, উৎস সহ পরিবর্তন করতে পারে আইপি ঠিকানা. যখন এটি ঘটে, তখন `RemoteIpAddress` বৈশিষ্ট্য মধ্যস্থতাকারী ডিভাইসের IP ঠিকানা দেয়, মূল ক্লায়েন্টের নয়।
'ফরোয়ার্ডেড হেডার মিডলওয়্যার' সমাধান
এই ধরনের মধ্যস্থতাকারীদের পিছনে চলমান অ্যাপ্লিকেশনগুলির জন্য, .NET কোর 'ফরোয়ার্ডেডহেডার মিডলওয়্যার' প্রদান করে, একটি মিডলওয়্যার যা 'এক্স-ফরওয়ার্ডেড-*' শিরোনামের সাথে কাজ করে মূল HTTP অনুরোধের বিবরণ ধরে রাখতে।
`ForwardedHeadersMiddleware` সক্ষম করতে, আপনার Startup.cs ক্লাসে নিম্নলিখিত কনফিগারেশন যোগ করুন।
সর্বজনীন অকার্যকর কনফিগার (IAapplicationBuilder অ্যাপ, IWebHostEnvironment env)
{
app.Forwarded Headers(নতুন ফরওয়ার্ডেড হেডার অপশন) ব্যবহার করুন
{
ForwardedHeaders = ফরোয়ার্ড হেডার্স.XForwardedFor |
ForwardedHeaders.XForwardedProto
});
//…
}
HttpContext এবং ফরোয়ার্ড করা শিরোনাম ব্যবহার করা
তারপরে আপনি আগের মতো HttpContext.Connection.RemoteIpAddress ব্যবহার করা চালিয়ে যেতে পারেন, কিন্তু এখন, যখন উপলব্ধ হবে, সার্ভারটি প্রক্সি বা লোড ব্যালেন্সারের পিছনে থাকলেও এটি ক্লায়েন্টের আইপি ঠিকানা সঠিকভাবে ফিরিয়ে দেবে।
মনে রাখবেন ওয়েব প্রোগ্রামিং এর জটিল ক্ষেত্রে মিডলওয়্যার এবং কনটেক্সট অবজেক্টের সঠিক ব্যবহার Http প্রসঙ্গ একটি আপাতদৃষ্টিতে কঠিন কাজ করতে পারে যেমন একটি দূরবর্তী আইপি পাওয়া বেশ সহজ। ক্লায়েন্টের আইপি ঠিকানা পুনরুদ্ধার করার জন্য, আমাদের HTTP প্রোটোকলের জটিলতা, 'ফরওয়ার্ড হেডার্স মিডলওয়্যার'-এর মতো মিডলওয়্যারের ভূমিকা এবং এর ইউটিলিটি বুঝতে হবে Http প্রসঙ্গ অবজেক্ট।