পিএইচপি-তে সিআরএল ব্যবহার করে আমি কীভাবে টর লুকানো পরিষেবার সাথে সংযোগ স্থাপন করতে পারি?


366

আমি নিম্নলিখিত পিএইচপি কোড ব্যবহার করে একটি টোর লুকানো পরিষেবার সাথে সংযোগ দেওয়ার চেষ্টা করছি:

$url = 'http://jhiwjjlqpyawmpjx.onion/'
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "http://127.0.0.1:9050/");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
$output = curl_exec($ch);
$curl_error = curl_error($ch);
curl_close($ch);

print_r($output);
print_r($curl_error);

আমি যখন এটি চালাব, আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

হোস্টের নামটি সমাধান করতে পারেনি

তবে আমি যখন উবুন্টুতে আমার কমান্ড লাইন থেকে নিম্নলিখিত কমান্ডটি চালাচ্ছি:

curl -v --socks5-hostname localhost:9050 http://jhiwjjlqpyawmpjx.onion

আশানুরূপ সাড়া পেয়েছি

পিএইচপি সিআরএল ডকুমেন্টেশন এতে বলে:

--socks5-hostname
Use  the  specified  SOCKS5 proxy (and let the proxy resolve the host name).

আমি বিশ্বাস করি যে কমান্ড লাইন থেকে এটি কাজ করার কারণ হ'ল টর (প্রক্সি) .onion হোস্টনামটি সমাধান করছে, যা এটি স্বীকৃত। উপরের পিএইচপি কোড চালানোর সময়, আমার অনুমান যে সিআরএল বা পিএইচপি .onion হোস্টনেমটি সমাধান করার চেষ্টা করছে এবং এটি সনাক্ত করে না। প্রক্সিটি হোস্টনামটি সমাধান করতে দিতে আমি সিআরএল / পিএইচপি বলার উপায় অনুসন্ধান করেছি, তবে আমি কোনও উপায় খুঁজে পাচ্ছি না।

খুব অনুরূপ স্ট্যাক ওভারফ্লো প্রশ্ন রয়েছে, পিএইচপি ব্যবহার করার সময় মোজা 5 প্রক্সি ব্যবহার করে সিআরএল অনুরোধ ব্যর্থ হয়, তবে এটি কমান্ড লাইনের মাধ্যমে কাজ করে

উত্তর:


98

আপনাকে বিকল্পটি সেট CURLOPT_PROXYTYPEকরতে হবে CURLPROXY_SOCKS5_HOSTNAME, যা পুরানো পিএইচপি সংস্করণে দুঃখজনকভাবে সংজ্ঞায়িত হয়নি, প্রায় 5.6 পূর্বের সংস্করণে ; আপনার যদি এর আগে থাকে তবে আপনি স্পষ্টভাবে এর মানটি ব্যবহার করতে পারেন যা এর সমান 7:

curl_setopt($ch, CURLOPT_PROXYTYPE, 7);

21

আমি ব্যবহার Privoxy তোর পৃষ্ঠাগুলি গেরো প্রয়োজন এবং কার্ল:

<?php
    $ch = curl_init('http://jhiwjjlqpyawmpjx.onion'); // Tormail URL
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
    curl_setopt($ch, CURLOPT_PROXY, "localhost:8118"); // Default privoxy port
    curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
    curl_exec($ch);
    curl_close($ch);
?>

প্রিভোক্সি ইনস্টল করার পরে আপনার এই লাইনটি কনফিগারেশন ফাইল ( /etc/privoxy/config) এ যুক্ত করতে হবে। স্থানটি নোট করুন এবং '।' লাইনের শেষ

forward-socks4a / localhost:9050 .

তারপরে প্রিয়ভোক্সি পুনরায় চালু করুন।

/etc/init.d/privoxy restart

এইটা কাজ করে! উইন্ডোজ 10 এবং সেন্টোস 6 উভয় ক্ষেত্রেই পরীক্ষিত, টর যদি মোজা 4 এর পরিবর্তে 5 মোজা ব্যবহার করে তবে এটি ব্যবহার করুন:forward-socks5 / localhost:9150 .
ডেভিড রেফুয়া

এটি কাজ করার জন্য আমার কি টিওআর এবং প্রিভোক্সি দুটোই দরকার? ধন্যবাদ
এএমবি


5

টিএল; ডিআর: আপনার কাছে আধুনিক পিএইচপি থাকলে অন্যটি মান এবং / অথবা মানটি সংশোধন করে CURLOPT_PROXYTYPEব্যবহার করতে সেট করুন ।CURLPROXY_SOCKS5_HOSTNAME7CURLOPT_PROXY

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

ব্যবহার CURLPROXY_SOCKS5কার্ল কমান্ড সরাসরি প্রক্সি তার ট্রাফিক পাঠাতে হবে, কিন্তু হবে না ডোমেন নাম রেজল্যুশন জন্য একই কাজ। ডিএনএস অনুরোধগুলি, যেগুলি সিএনএল পেঁয়াজ সাইটের সাথে প্রকৃত সংযোগ স্থাপনের চেষ্টা করার আগে নির্গত হয় , তবুও এটি সিস্টেমের সাধারণ ডিএনএস সমাধানকারীকে প্রেরণ করা হবে। এই ডিএনএস অনুরোধগুলি অবশ্যই ব্যর্থ হবে, কারণ সিস্টেমের সাধারণ ডিএনএস রেজোলভার কোনও .onionঠিকানা দিয়ে কী করবেন তা জানতে পারবেন না যদি না এটিও নির্দিষ্টভাবে টোরের কাছে এই জাতীয় প্রশ্নগুলি না পাঠিয়ে দেয়।

পরিবর্তে CURLPROXY_SOCKS5, আপনার অবশ্যই ব্যবহার করা উচিত CURLPROXY_SOCKS5_HOSTNAME। বিকল্পভাবে, আপনি ব্যবহার করতে পারেন CURLPROXY_SOCKS4A, তবে এসওকেএসএস 5 অনেক বেশি পছন্দ করা হয়। এই প্রক্সি টাইপগুলির মধ্যে উভয়ই তার ডিএনএস লকআপস এবং প্রক্সিটির মাধ্যমে এর প্রকৃত ডেটা স্থানান্তর উভয় সম্পাদনের জন্য সিআরএলকে অবহিত করে। সফলভাবে যে কোনও .onionডোমেন সমাধান করার জন্য এটি প্রয়োজন ।

মূল প্রশ্নে কোডে দুটি অতিরিক্ত ত্রুটিও রয়েছে যা পূর্ববর্তী মন্তব্যকারীদের দ্বারা এখনও ঠিক করা হয়নি। এইগুলো:

  • লাইন 1 এর শেষে সেমিকোলন অনুপস্থিত।
  • প্রক্সি ঠিকানার মানটি এইচটিটিপি ইউআরএল সেট করা আছে তবে এর ধরণটি এসওকেএসএস; এগুলি বেমানান। SOCKS প্রক্সিগুলির জন্য মানটি কোনও আইপি বা ডোমেন নাম এবং কোনও স্কিম / প্রোটোকল / উপসর্গ ছাড়াই পোর্ট নম্বর সংমিশ্রণ হতে হবে।

পরিবর্তনগুলি নির্দেশ করার মতামত সহ পুরো সঠিক কোডটি এখানে।

<?php
$url = 'http://jhiwjjlqpyawmpjx.onion/'; // Note the addition of a semicolon.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "127.0.0.1:9050"); // Note the address here is just `IP:port`, not an HTTP URL.
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME); // Note use of `CURLPROXY_SOCKS5_HOSTNAME`.
$output = curl_exec($ch);
$curl_error = curl_error($ch);
curl_close($ch);

print_r($output);
print_r($curl_error);

আপনি উপসর্গ অন্তর্ভুক্ত করতে মান CURLOPT_PROXYTYPEপরিবর্তন করে পুরোপুরি সেটিংসটি বাদ দিতে পারেন :CURLOPT_PROXYsocks5h://

// Note no trailing slash, as this is a SOCKS address, not an HTTP URL.
curl_setopt(CURLOPT_PROXY, 'socks5h://127.0.0.1:9050');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.