একটি / প্রোক / ফাইল পার্স করা নিরাপদ?


152

আমি পার্স করতে চাই /proc/net/tcp/ , তবে এটি নিরাপদ?

আমার কীভাবে ফাইলগুলি খুলতে এবং পড়তে হবে এবং /proc/ভয় পাওয়া উচিত নয় যে একই সাথে অন্য কোনও প্রক্রিয়া (বা ওএস নিজেই) এটিকে পরিবর্তন করবে?


29
+1 টি। এটা খুব ভাল প্রশ্ন। আমি কেবল আমার উত্তরটি পেতে চাই, তবে আমি এই ধরণের জিনিসটি বেশ খানিক আগে করেছি বলে সন্ধানের অপেক্ষায় রয়েছি।
paxdiablo

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

3
সহজ উত্তরটি অবশ্যই হ্যাঁ, কারণ এটি কোনও ফাইল নয় - এটি পড়া সর্বদা নিরাপদ থাকা উচিত। উত্তরগুলি আপনি এটি পড়ার পরবর্তী সময়ে সামঞ্জস্যপূর্ণ নাও করতে পারেন তবে এটি নিরাপদ হবে।
ররি আলসপ

এজন্য আপনার পরিবর্তে সিসেক্টল ব্যবহার করা উচিত। (এটির চেয়ে কম স্কাইস্কেলগুলিও)
ভাল ব্যক্তি

@ গুডপারসন - উদাহরণস্বরূপ, এটি কীভাবে sysctlআমাকে একটি /proc/net/tcp/ফাইল পার্স করতে সহায়তা করতে পারে ?
কিরিল কিরভ

উত্তর:


111

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

উদাহরণ স্বরূপ:

  • /proc/uptimeহয় সম্পূর্ণই পারমাণবিক , যেমন কেউ অন্য উত্তর উল্লেখিত - কিন্তু শুধুমাত্র লিনাক্স 2.6.30 থেকে , যা কম দুই বছর পুরানো। এমনকি এই ক্ষুদ্র, তুচ্ছ ফাইলটি তখন পর্যন্ত কোনও রেসের শর্ত সাপেক্ষে ছিল এবং এখনও বেশিরভাগ এন্টারপ্রাইজ কার্নেলের মধ্যে রয়েছে। দেখুন fs/proc/uptime.cবিদ্যুৎ উৎস, অথবা কমিট এটি পারমাণবিক প্রণীত । প্রাক-২.6.৩০ কার্নেলে, আপনি openফাইলটি readকিছুটা করতে পারেন , তারপরে আপনি যদি পরে readআবার ফিরে আসেন তবে আপনি যে অংশটি পেয়েছেন সেটি প্রথম টুকরোটির সাথে অসামঞ্জস্যপূর্ণ হবে। (আমি এটি কেবল প্রদর্শন করেছি - মজাদার জন্য নিজে চেষ্টা করুন))

  • /proc/mountsহয় একটি একক মধ্যে পারমাণবিক readসিস্টেম কল। সুতরাং আপনি যদি readএকবারে পুরো ফাইলটি করেন, আপনি সিস্টেমে মাউন্ট পয়েন্টগুলির একক ধারাবাহিক স্ন্যাপশট পাবেন। তবে, আপনি যদি বেশ কয়েকটি readসিস্টেম কল ব্যবহার করেন - এবং ফাইলটি বড় হয় তবে আপনি যদি সাধারণ I / O লাইব্রেরি ব্যবহার করেন এবং এই বিষয়ে বিশেষ মনোযোগ না দেন তবে ঠিক এটি ঘটবে - আপনি কোনও রেসের শিকার হবেন শর্ত। কেবলমাত্র আপনি একটি সামঞ্জস্যপূর্ণ স্ন্যাপশট পাবেন না, তবে মাউন্ট পয়েন্টগুলি যা আপনি শুরু করার আগে উপস্থিত ছিলেন এবং কখনও উপস্থিত না হওয়া বন্ধ করেছিলেন তা আপনি যা দেখছেন তা হারিয়ে যেতে পারে। এটি একের জন্য পারমাণবিক দেখতে read(), m_start()ইন-ইনfs/namespace.c এবং এটি একটি সেমফোর্ দখল দেখতে যে রক্ষীদের mountpoints তালিকা, যার ফলে এটি পর্যন্ত রাখে , যা বলা হয় যখন সম্পন্ন করা দেখুন। কী ভুল হতে পারে তা দেখতে, গত বছরের এই বাগটি দেখুনm_stop()read() অন্যথায় উচ্চ মানের সফটওয়্যার যা খুশিমনে পড়ুন (একই এক আমি উপরের লিঙ্ক) /proc/mounts

  • /proc/net/tcp, যা আপনি আসলে যা সম্পর্কে জিজ্ঞাসা করছেন তার চেয়ে কম সামঞ্জস্যপূর্ণ। এটি কেবল টেবিলের প্রতিটি সারির মধ্যে পারমাণবিক । এই, বর্ণন দেখার জন্য listening_get_next()net/ipv4/tcp_ipv4.c এবং established_get_next()ঠিক একই ফাইলের মধ্যে নিচে, এবং কেশ দেখতে তারা ঘুরে প্রতিটি এন্ট্রি উপর তুলে আনুন। সারি থেকে সারিতে ধারাবাহিকতার অভাব প্রদর্শনের জন্য আমার কাছে রেপ্রো কোডটি কার্যকর নেই তবে সেখানে কোনও লক নেই (বা অন্য কিছু) যা এটি সামঞ্জস্য করে তুলবে। আপনি যদি এটির বিষয়ে চিন্তা করেন তবে কোনটি বোঝায় - নেটওয়ার্কিং প্রায়শই সিস্টেমের একটি অতি-ব্যস্ত অংশ, তাই এই ডায়াগনস্টিক সরঞ্জামটিতে একটি সামঞ্জস্যপূর্ণ দৃষ্টিভঙ্গি উপস্থাপন করার জন্য ওভারহেডের পক্ষে মূল্য নয়।

অন্যান্য টুকরা যে রাখে /proc/net/tcpপ্রতিটি সারির মধ্যে পারমাণবিক মধ্যে বাফার উপলব্ধ করা হয় seq_read(), যা আপনি পড়তে পারেন মধ্যেfs/seq_file.c । এটি নিশ্চিত করে যে একবার আপনি read()একটি সারির অংশ হয়ে গেলে, পুরো সারির পাঠ্যটি একটি বাফারে রাখা হয় যাতে পরেরটি read()একটি নতুন শুরু করার আগে এই সারির বাকী অংশটি পায়। /proc/mountsআপনি একাধিক read()কল করলেও প্রতিটি সারির পারমাণবিক রাখতে একই প্রক্রিয়াটি ব্যবহৃত হয় /proc/uptimeএবং নতুন কর্নেলগুলিতেও পারমাণবিক থাকার জন্য এটি ব্যবহার করার পদ্ধতি । এই প্রক্রিয়াটি পুরো ফাইলটি বাফার করে না , কারণ কার্নেল মেমরির ব্যবহার সম্পর্কে সতর্ক।

বেশিরভাগ ফাইলের মধ্যে /procকমপক্ষে যতটা সামঞ্জস্য থাকবে /proc/net/tcp, প্রতিটি সারিটিতে তারা যে তথ্য সরবরাহ করছে তাতে একটি প্রবেশের ধারাবাহিক চিত্র থাকবে কারণ তাদের বেশিরভাগ একই seq_fileবিমূর্ততা ব্যবহার করে । /proc/uptimeউদাহরণ হিসাবে বর্ণনা করা হয়েছে, যদিও কিছু ফাইল এখনও seq_file২০০৯ হিসাবে ব্যবহারের জন্য মাইগ্রেট করা হয়েছিল ; আমি বাজি ধরছি এমন কিছু এখনও রয়েছে যা পুরানো প্রক্রিয়া ব্যবহার করে এবং এতোটা পারমাণবিকতার স্তরও নেই। এই সতর্কতা খুব কমই নথিভুক্ত করা হয়। প্রদত্ত ফাইলের জন্য, আপনার একমাত্র গ্যারান্টি হ'ল উত্সটি পড়া।

এর ক্ষেত্রে /proc/net/tcp, আপনি এটি পড়তে এবং নির্ভয়ে প্রতিটি লাইন পার্স করতে পারেন। কিন্তু আপনি যদি একবারে একাধিক লাইনের থেকে কোন উপসংহার টানা চেষ্টা - হুঁশিয়ার, অন্যান্য প্রক্রিয়া এবং কার্নেল হয় এটা পরিবর্তন করার সময়ে আপনি এটা পড়তে, এবং আপনি সম্ভবত একটি বাগ তৈরি করা হয়।


1
রিডডির পারমাণবিকতা সম্পর্কে কী? পড়া / প্রকোপ / স্ব / এফডি পছন্দ? এটি নিরাপদ?
সকেটপেইয়ার

এমন নয় যে এটা প্রশ্নের উত্তর কিন্তু কিভাবে আপটাইম চেক করতে আপনি ব্যবহার করতে পারেন সম্পর্কে যোগ করার জন্য clock_gettime(2)সঙ্গে CLOCK_MONOTONIC(যদিও হয়তো সেখানে একটি পরিভাষা আমি এখানে অবিদিত নই কিন্তু আমি ব্যক্তিগতভাবে শুধুমাত্র বুট যেহেতু সময়ের সাথে সাথে এটা দেখা যায়)। লিনাক্সের জন্য আপনারও বিকল্প রয়েছে sysinfo(2)
প্রাইফটান

44

যদিও ফাইল /procইউজার-স্পেস নিয়মিত ফাইল হিসেবে উপস্থিত তারা সত্যিই ফাইল বরং সত্ত্বা যে ইউজার-স্পেস থেকে মান ফাইল অপারেশন সমর্থন করে না হয় ( open, read, close)। নোট করুন যে এটি ডিস্কে একটি সাধারণ ফাইল যা কার্নেল দ্বারা পরিবর্তন করা হচ্ছে তার চেয়ে আলাদা।

সমস্ত কর্নেলটি এর অভ্যন্তরীণ অবস্থাটি তার নিজস্ব মেমরিতে একটি sprintfপছন্দযুক্ত ফাংশন ব্যবহার করে মুদ্রণ করা হয় এবং আপনি যখন কোনও read(2)সিস্টেম কল ইস্যু করেন তখন সেই স্মৃতিটি ইউজারস্পেসে অনুলিপি করা হয় ।

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

আমার পরামর্শটি হ'ল আপনার বিশেষ ইউনিক্স গন্ধে একটি প্রোক ফাইলের বাস্তবায়নটি একবার দেখুন। এটি সত্যিই একটি বাস্তবায়ন সমস্যা (ফর্ম্যাট এবং আউটপুট সামগ্রী হিসাবে) যা একটি মান দ্বারা পরিচালিত হয় না।

এর সহজ উদাহরণটি uptimeহ'ল লিনাক্সে প্রোক ফাইলটি প্রয়োগ করা । সরবরাহ করা কলব্যাক ফাংশনে কীভাবে পুরো বাফার উত্পাদিত হয় তা নোট করুন single_open


3
@ ইগানাসিও: আমি কেবল ওপিটিকে এই দিকে নির্দেশ করছি কারণ আমার মনে এই ধারণা থেকে যায় যে তিনি মনে করেন যে procফাইলগুলি কার্নেলের দ্বারা লেখার জন্য খোলা ফাইলগুলি সাধারণ ফাইল।
ব্লাগোভেষ্ট বায়ুকলিয়েভ

4
নির্দিষ্ট ফাইলটির বাস্তবায়নটি দেখার জন্য আপনার পরামর্শটি ভাল। দুর্ভাগ্যক্রমে অনুমান যে এটি সমস্ত স্ন্যাপশট করা open()হয়েছে অনেকগুলি ফাইলের জন্য এবং বিশেষত /proc/net/tcpওপি সম্পর্কিত যা এটি সম্পর্কিত ভুল। আপনি যদি এই শব্দার্থবিজ্ঞানের সরবরাহের ব্যয়টি সম্পর্কে চিন্তা করেন তবে এটি বোধগম্য হয় - আপনাকে অভ্যন্তরীণ ডেটা স্ট্রাকচারগুলি লক করার মতো কিছু করতে হবে যা সমস্ত টিসিপি সংযোগ রেকর্ড করে, যা একটি ব্যস্ত সিস্টেমে কেবলমাত্র দীর্ঘকাল ধরে রাখলেও বিপর্যয় হয় ডেটা বাফারে স্ক্যান করে ফর্ম্যাট করতে যথেষ্ট। আসলে কী ঘটে যায় সে সম্পর্কে বিশদ জানতে আমার উত্তর দেখুন।
গ্রেগ মূল্য 21

16

/ proc একটি ভার্চুয়াল ফাইল সিস্টেম: বাস্তবে, এটি কেবল কার্নেল ইন্টার্নালগুলির জন্য একটি সুবিধাজনক দৃশ্য দেয়। এটি পড়ার জন্য এটি অবশ্যই নিরাপদ (তবে এটি এখানে) তবে এটি দীর্ঘ মেয়াদে ঝুঁকিপূর্ণ, কারণ এই ভার্চুয়াল ফাইলগুলির অভ্যন্তরীণ কার্নেলের নতুন সংস্করণ দিয়ে বিকশিত হতে পারে।

সম্পাদনা

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

EDIT2

স্কো ডকের মতে (লিনাক্স নয়, তবে আমি নিশ্চিত যে * নিক্সের সমস্ত স্বাদগুলি এর সাথে আচরণ করে)

যদিও প্রক্রিয়া স্থিতি এবং ফলস্বরূপ / proc ফাইলগুলির বিষয়বস্তু তাত্ক্ষণিক থেকে তাত্ক্ষণিকভাবে পরিবর্তিত হতে পারে, একটি / প্রোক ফাইলের একক পঠন (2) রাষ্ট্রের ane ane বুদ্ধিমান 'উপস্থাপনা ফিরিয়ে দেওয়ার গ্যারান্টিযুক্ত, অর্থাত্ পঠিত হবে প্রক্রিয়াটির অবস্থার একটি পারমাণবিক স্ন্যাপশট। চলমান প্রক্রিয়াটির জন্য কোনও / প্রো ফাইলটিতে প্রয়োগ করা পঠিত পাঠকদের ক্ষেত্রে এরকম কোনও গ্যারান্টি প্রযোজ্য না। তদ্ব্যতীত, যেমন (ঠিকানা-স্থান) ফাইলটিতে প্রয়োগ করা কোনও I / O এর জন্য বিশেষভাবে পারমাণবিকতার গ্যারান্টিযুক্ত নয়; যে কোনও প্রক্রিয়ার ঠিকানার স্থানের বিষয়বস্তুগুলি একই সময়ে একটি প্রক্রিয়াটির LWP বা সিস্টেমের অন্য কোনও প্রক্রিয়া দ্বারা সংশোধন করা যেতে পারে।


3
"আমি মনে করি" ? একটি নির্দিষ্ট উত্তর দেওয়া ভাল
লাগবে

কার্নেলের মধ্যে / proc প্রয়োগের ফলে লিনাক্সের ক্ষেত্রেও এটি সত্য true আপনি যদি একটি একক রিড কলে একটি প্রোফস ফাইলটি পড়েন তবে এটি সামঞ্জস্যপূর্ণ - অবশ্যই ধরে নিবেন যে আপনি যে প্রোক ফাইলটি পড়েছেন তা সঠিকভাবে কার্নলাইড কার্যকর করা হয়েছে।
এরিক

8
আমি মনে করি না যে আপনি এসসিওর চেয়ে আরও খারাপ সম্ভাব্য উত্স নিয়ে আসতে procপারেন এবং এটির চেষ্টা করার চেষ্টা করছেন যেন এটি বিভিন্ন কার্নেলের মধ্যে একই রকম আচরণ করে (বা এমনকি এটি অনুমান করেও নেয় - এটি কোনও ইউনিক্স সিস্টেমে নেই) ) আপনাকে আঘাতের একটি পৃথিবী পেতে চলেছে।
নিকোলাস নাইট

1
@ নিকোলাস: ভাল, কার্নেল ডকের কোনও নির্দিষ্ট উত্তর খুঁজে পাওয়া যায়নি, যদি আপনি এটি জানেন তবে এটি নির্দ্বিধায় অনুভব করুন।
ব্রুস

2
আকর্ষণীয় যে এসসিও ডকস এটি বলে। দুর্ভাগ্যক্রমে এটি লিনাক্সে সর্বদা সত্য নয় এবং বিশেষত এটি সত্য নয় /proc/net/tcp, যা ওপি'র মূল উদ্বেগ। বরং আউটপুটে কেবল প্রতিটি পৃথক সারিটি পারমাণবিক। বিস্তারিত জানার জন্য আমার উত্তর দেখুন।
গ্রেগ দাম

14

লিনাক্স কার্নেলের প্রোকফস এপিআই একটি ইন্টারফেস সরবরাহ করে তা নিশ্চিত করতে একটি রিটার্ন ধারাবাহিক ডেটা পড়ে। মন্তব্য পড়ুন __proc_file_read। আইটেম 1) বড় মন্তব্য ব্লক এই ইন্টারফেস ব্যাখ্যা করে।

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


4
দুর্ভাগ্যক্রমে, অনেকগুলি ফাইল /procপ্রকৃতপক্ষে ধারাবাহিকতা সরবরাহ করে না। বিস্তারিত জানার জন্য আমার উত্তর দেখুন।
গ্রেগ দাম

3
এছাড়াও, __proc_file_read()পক্ষে হ্রাস করা হয় seq_file। লম্বা ব্লক মন্তব্যের ঠিক উপরে (বরং লিনাস দ্বারা) শ্রুতিমধুর মন্তব্য দেখুন।
গ্রেগ দাম

6

আমি এম্বেড থাকা এআরএম টার্গেটে এই মুহুর্তে ড্রাইভার বিকাশ করছি বলে লিনাক্স ২.6.২7.৮ হ্যান্ডি আমার কাছে সোর্স রয়েছে।

linux-2.6.27.8-lpc32xx/net/ipv4/raw.c934 লাইনে ফাইলটি উদাহরণস্বরূপ রয়েছে

    seq_printf(seq, "%4d: %08X:%04X %08X:%04X"
            " %02X %08X:%08X %02X:%08lX %08X %5d %8d %lu %d %p %d\n",
            i, src, srcp, dest, destp, sp->sk_state,
            atomic_read(&sp->sk_wmem_alloc),
            atomic_read(&sp->sk_rmem_alloc),
            0, 0L, 0, sock_i_uid(sp), 0, sock_i_ino(sp),
            atomic_read(&sp->sk_refcnt), sp, atomic_read(&sp->sk_drops));

যা ফলাফল

[wally@zenetfedora ~]$ cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode                                                     
   0: 017AA8C0:0035 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 15160 1 f552de00 299
   1: 00000000:C775 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 13237 1 f552ca00 299
...

ফাংশনে raw_sock_seq_show()যা প্রোফস হ্যান্ডলিং ফাংশনগুলির একটি শ্রেণিবিন্যাসের অংশ । read()অনুরোধটি /proc/net/tcpফাইল তৈরি না করা পর্যন্ত পাঠ্যটি তৈরি করা হয় না , কারণ একটি প্রচলিত পদ্ধতি যা প্রেফস পড়েছে তথ্য আপডেট করার চেয়ে অবশ্যই খুব কম সাধারণ।

কিছু ড্রাইভার (যেমন আমার) একক দিয়ে প্রোক_আড ফাংশন প্রয়োগ করে sprintf()। মূল ড্রাইভার বাস্তবায়নে অতিরিক্ত জটিলতা হ'ল সম্ভাব্য খুব দীর্ঘ আউটপুট পরিচালনা করা যা একটি একক পড়ার সময় অন্তর্বর্তী, কার্নেল-স্পেস বাফারে ফিট নাও হতে পারে।

আমি এটি একটি 64 কে রিড বাফার ব্যবহার করে একটি প্রোগ্রাম দিয়ে পরীক্ষা করেছি তবে এটি ফলাফলের জন্য ডেটা ফেরত দেওয়ার জন্য আমার সিস্টেমে 3072 বাইটের কার্নেল স্পেস বাফার তৈরি করে। অগ্রণী পয়েন্টার সহ একাধিক কলগুলির চেয়ে বেশি পাঠ্য ফিরে আসার প্রয়োজন হয় to আমি যখন জানি না যে যখন একাধিক আই / ও-র প্রয়োজন হয় তখন ফিরে আসা ডেটাগুলিকে সামঞ্জস্য করার সঠিক উপায় কী। অবশ্যই প্রতিটি এন্ট্রি /proc/net/tcpস্ব-সামঞ্জস্যপূর্ণ। কিছুটা সম্ভাবনা রয়েছে যে পাশাপাশি পাশাপাশি লাইনগুলি বিভিন্ন সময়ে স্ন্যাপশট হয়।


সত্যিই দুঃখিত, আমি এটি খুব বেশি পাইনি। সুতরাং, আপনার অর্থ কি, আমি যদি ifstreamএটি ব্যবহার করি তবে এটি অনিরাপদ হবে, তবে আমি যদি readএটি ব্যবহার করি তবে এটি নিরাপদ হবে? না ifstreamঅভ্যন্তরীণভাবে ব্যবহার করে read? এবং আপনি কি পরামর্শ?
কিরিল কিরভ

@ কিরিল: বিভ্রান্তির জন্য দুঃখিত। এটি কীভাবে এটির জন্য ডেটা /proc/net/tcpফর্ম্যাট করা হয় এবং এটি কীভাবে পড়তে পারে তার থেকে সম্পূর্ণ স্বাধীন এটি এর ব্যাখ্যা of
wallyk

1
হাঁ! এবং আপনার অনুমান সঠিক যে বিভিন্ন লাইন (ইন /proc/net/tcp) একই স্ন্যাপশট থেকে আসে না। কিছু ব্যাখ্যা জন্য আমার উত্তর দেখুন।
গ্রেগ দাম

3

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


আমি আমার নিজস্ব প্রক্রিয়াটির জন্য কিছু তথ্য পেতে এবং ব্যবহার করার জন্য এটি করছি (আমার পিআইডি-র ব্যবহার করে getpid())। সুতরাং, এটি নিরাপদ হবে।
কিরিল কিরভ

1
হ্যাঁ, আমি এটি সম্পূর্ণ নিরাপদ বিবেচনা করব।
আর .. গিথহাব বন্ধ হেল্পিং আইসিসি

আমি স্বীকার করি না যে শিশু প্রক্রিয়াগুলি অন্য যে কোনও প্রক্রিয়ার চেয়ে আরও ভাল আচরণ করা হবে। /procইন্টারফেসটি যতদূর সম্পর্কিত, তাদের সকলের একই দুর্বলতা এবং শক্তি রয়েছে। যাইহোক, ওপি ডিভাইস ড্রাইভার সম্পর্কিত তথ্য সম্পর্কে জিজ্ঞাসা করে, প্রক্রিয়াগুলি নয়।
wallyk

1
যদি পিড Nআপনার সন্তানের প্রক্রিয়া হয় তবে আপনি নিশ্চিত করতে পারেন যে পিড Nএখনও সেই একই (সম্ভবত সমাপ্ত) প্রক্রিয়াটিকে বোঝায় যতক্ষণ না আপনি এতে কোনও waitফ্যামিলি ফাংশন কল করেন । এটি নিশ্চিত করে যে কোনও দৌড় নেই।
আর .. গীটহাব বন্ধ করুন আইসিসি

-1 এর বন্যার কী আছে এবং কোনও ব্যাখ্যা নেই?
আর .. গীটহাব বন্ধ করুন ICE

2

আপনি যখন কোনও / প্রোক ফাইল থেকে পড়েন, কার্নেল একটি ফাংশন কল করছে যা আগাম রেজিস্ট্রেশন করা হয়েছে সেই প্রক ফাইলটির জন্য "পঠন" ফাংশন হিসাবে। __proc_file_readFs / proc / জেনেরিক.সি-তে ফাংশনটি দেখুন ।

অতএব, প্রোড রিডের সুরক্ষা কেবল ফাংশন হিসাবে নিরাপদ যেমন কার্নেল কলটি পড়ার অনুরোধটি পূরণ করার জন্য কল করে। যদি সেই ফাংশনটি স্পর্শ করে এমন সমস্ত ডেটা সঠিকভাবে লক করে এবং আপনাকে একটি বাফারে ফিরিয়ে দেয়, তবে সেই ফাংশনটি ব্যবহার করে পড়া সম্পূর্ণ নিরাপদ। যেহেতু / প্রো / ফাইল / নেট / টিসিপি-তে পাঠ্য অনুরোধগুলি সন্তুষ্ট করার জন্য ব্যবহৃত ফাইলগুলির মতো কিছু সময় ধরে ছিল এবং অবিচ্ছিন্ন পর্যালোচনা হয়েছে, সেগুলি আপনার কাছে যতটা জিজ্ঞাসা করতে পারে ততটা নিরাপদ। প্রকৃতপক্ষে, অনেকগুলি লিনাক্স ইউটিলিটি প্রোক ফাইল সিস্টেম থেকে পড়া এবং আউটপুটকে ভিন্ন উপায়ে বিন্যাস করার উপর নির্ভর করে। (আমার মাথার শীর্ষে, আমার মনে হয় 'পিএস' এবং 'নেটস্যাট' এটি করে)।

সর্বদা হিসাবে, আপনি আমার শব্দ গ্রহণ করতে হবে না; আপনার ভয়কে শান্ত করার জন্য আপনি উত্সটি দেখতে পারেন। Proc_net_tcp.txt থেকে নিম্নলিখিত ডকুমেন্টেশন আপনাকে জানায় যে "proc" / নেট / টিসিপি লাইভের জন্য "পড়ুন" ফাংশন রয়েছে, সুতরাং আপনি যখন প্রকট ফাইলটি পড়েন তখন চালিত আসল কোডটি দেখতে পারেন এবং নিজের জন্য যাচাই করতে পারেন যে সেখানে নেই লকিং বিপত্তি

এই ডকুমেন্টটি ইন্টারফেস / প্রোক / নেট / টিসিপি এবং / প্রোক / নেট / টিসিপি 6 বর্ণনা করে।
নোট করুন যে এই ইন্টারফেসগুলি tcp_diag এর পক্ষে হ্রাস করা হয়েছে। এই / proc ইন্টারফেসগুলি বর্তমানে সক্রিয় টিসিপি সংযোগগুলি সম্পর্কে তথ্য সরবরাহ করে এবং যথাক্রমে নেট / ipv4 / tcp_ipv4.c এ tcp4_seq_show () এবং নেট / ipv6 / tcp_ipv6.c এ tcp6_seq_show () দ্বারা প্রয়োগ করা হয়।

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