আমি কীভাবে একটি একক প্রক্রিয়ার নেটওয়ার্ক ট্র্যাফিক ক্যাপচার করতে পারি?


92

আমি একক প্রক্রিয়া দ্বারা নেটওয়ার্ক ট্র্যাফিক পরিচালিত হচ্ছে তা পরীক্ষা করে দেখতে চাই, তবে আমি যেমন একটি ব্যস্ত সিস্টেমের সাথে কাজ করছি (একই সাথে প্রচুর অন্যান্য ট্র্যাফিক ঘটছে) তাই সহজ নেটওয়ার্ক ক্যাপচারগুলি কাজ করবে না। কোনও একক নির্দিষ্ট প্রক্রিয়াটির নেটওয়ার্কিং ট্র্যাফিককে আলাদা করার tcpdumpবা wiresharkক্যাপচার করার কোনও উপায় আছে কি ? (ব্যবহার netstatকরা অপর্যাপ্ত))

উত্তর:


21

প্রকৃতপক্ষে একটি উপায় আছে, ওয়্যারশার্ক ফিল্টার ব্যবহার করে । তবে আপনি প্রক্রিয়া নাম বা পিআইডি দ্বারা সরাসরি ফিল্টার করতে পারবেন না (কারণ এগুলি নেটওয়ার্কের পরিমাণ নয়)।

আপনার প্রক্রিয়া দ্বারা ব্যবহৃত প্রোটোকল এবং পোর্টগুলি আগে বের করা উচিত ( পূর্ববর্তী মন্তব্যে নেটট্যাট কমান্ডটি ভাল কাজ করে)।

তারপরে ইনভারাউন্ড (বা আউটবাউন্ড) পোর্টটি সবেমাত্র পুনরুদ্ধার করে তার সাথে ফিল্টার করতে ওয়্যারশার্ক ব্যবহার করুন। এটি আপনার প্রক্রিয়া আগত এবং আগত ট্র্যাফিক পৃথক করা উচিত।


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

ঠিক আছে, এইচটিটিপি এবং ডিএনএস পাবলিক বন্দরগুলি প্রচুর অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয় তবে সংশ্লিষ্ট বেসরকারী বন্দরটি অনন্য। তাহলে আপনি কেন ব্যক্তিগত বন্দর দ্বারা ফিল্টারিং চেষ্টা করবেন না?
ওপেননিঙ্গিয়া

কারণ দ্রুত ছোট ছোট অনুরোধগুলি দেখা যাবে না netstat; আমি কেবল দীর্ঘকালীন সংযোগগুলি ধরতে সক্ষম হব। :(
কিস কুক

প্রক্রিয়াটি রান চলাকালীন গতিশীল পোর্টগুলি ব্যবহার করে, তবে আপনার স্ট্যাটিক পোর্ট ফিল্টার ব্যবহার করতে সক্ষম হবেন না
দ্য ইউনিক্স জানিটার

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

134

একটি নতুন প্রক্রিয়া শুরু এবং নিরীক্ষণের জন্য:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS

একটি পরিচিত পিআইডি সহ একটি বিদ্যমান প্রক্রিয়া পর্যবেক্ষণ করতে:

strace -p $PID -f -e trace=network -s 10000
  • -f "নতুন প্রক্রিয়া অনুসরণ" জন্য
  • -e একটি ফিল্টার সংজ্ঞায়িত করে
  • -s স্ট্রিংয়ের সীমা 32 টির বেশি সেট করে
  • -p সংযুক্ত হতে প্রক্রিয়া আইডি নেয় takes

2
এটি দরকারী কারণ এটি রুট অ্যাক্সেস বা বিশেষ অনুমতি ছাড়াই ব্যবহার করা যেতে পারে (কিছু লিনাক্স বিতরণে, যাইহোক - উবুন্টুতে আপনার বিশেষ অনুমতি প্রয়োজন হতে পারে)।
রবিন গ্রিন

1
এটি কার্যকরও, কারণ এটি ইতিমধ্যে চালু হওয়া প্রক্রিয়াটির বিরুদ্ধে চালানো যেতে পারে এবং কার্যত কোনও লিনাক্স বাক্সে উপলব্ধ।
zakmck

53

আমি জানি এই থ্রেডটি কিছুটা পুরাতন তবে আমি মনে করি এটি আপনার কারও পক্ষে সহায়তা করতে পারে:

যদি আপনার কার্নেল এটির অনুমতি দেয় তবে বিচ্ছিন্ন একটি নেটওয়ার্ক নেমস্পেসে উল্লিখিত প্রক্রিয়াটি চালিয়ে এবং উল্লিখিত নেমস্পেসে ওয়্যারশার্ক (বা অন্যান্য স্ট্যান্ডার্ড নেটওয়ার্কিং সরঞ্জাম) ব্যবহার করে একটি প্রসেসের নেটওয়ার্ক ট্র্যাফিককে ক্যাপচার করা খুব সহজেই করা যায়।

সেটআপটি কিছুটা জটিল মনে হতে পারে তবে আপনি এটি বুঝতে পেরে এবং এর সাথে পরিচিত হয়ে উঠলে এটি আপনার কাজটিকে এত সহজ করে দেবে।

যাতে এটি করতে:

  • একটি পরীক্ষা নেটওয়ার্ক নেমস্পেস তৈরি করুন:

    ip netns add test
    
  • ভার্চুয়াল নেটওয়ার্ক ইন্টারফেসের একটি জুড়ি তৈরি করুন (ভਥ-এ এবং ভर्थ-বি):

    ip link add veth-a type veth peer name veth-b
    
  • veth-an ইন্টারফেসের সক্রিয় নাম স্থান পরিবর্তন করুন:

    ip link set veth-a netns test
    
  • ভার্চুয়াল ইন্টারফেসের আইপি ঠিকানাগুলি কনফিগার করুন:

    ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
    ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
    
  • পরীক্ষার নেমস্পেসে রাউটিংটি কনফিগার করুন:

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • ip_forward সক্রিয় করুন এবং আপনার তৈরি করা নামস্থান থেকে ট্র্যাফিক আগমন করার জন্য একটি নেট বিধি প্রতিষ্ঠা করুন (আপনাকে নেটওয়ার্ক ইন্টারফেস এবং এসএনএটি আইপি ঠিকানা সামঞ্জস্য করতে হবে):

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o <your internet interface, e.g. eth0> -j SNAT --to-source <your ip address>
    

    (আপনি যদি চান তবে আপনি মাস্কেরডে নিয়মটিও ব্যবহার করতে পারেন)

  • শেষ অবধি, আপনি নতুন নেমস্পেসে বিশ্লেষণ করতে চান এমন প্রক্রিয়াটি চালাতে পারেন, এবং ওয়্যারশার্কও:

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

    আপনাকে ভ্যাথ-ইন্টারফেসটি পর্যবেক্ষণ করতে হবে।


4
দুর্দান্ত ধারণা, তবে "সীমাবদ্ধতা" থেকে সাবধান থাকুন। যেহেতু এটি পৃথক নেমস্পেস, আপনি লুপব্যাক ঠিকানা (এসএস) বা ইউনিক্স ডোমেন সকেট ব্যবহার করে ডিফল্ট নেমস্পেসে স্থানীয় প্রক্রিয়াগুলির সাথে যোগাযোগ করতে পারবেন না। পরেরটি ডি-বাসের মাধ্যমে যোগাযোগকে প্রভাবিত করে।
লেকেনস্টেইন

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

1
@ আরানডুনেল আমার আরও নিখুঁত হওয়া উচিত। আমি যা বলতে চাইছিলাম তা হল "অ্যাবস্ট্রাক্ট সকেট নেমস্পেস" (যা ফাইল সিস্টেমটি ব্যবহার করে না) এর ইউনিক্স ডোমেন সকেটগুলি সরাসরি নেটওয়ার্ক নেমস্পেসের মধ্যে অ্যাক্সেস করা যায় না। কার্যকারণ হিসাবে আপনি একটি প্রক্সি ব্যবহারsocat করতে পারেন
লেকেনস্টেইন

আপনি কোন আইপি ঠিকানাটি --to-sourceযুক্তি দিয়ে ব্যবহার করবেন iptables? আপনি যে -oঅপশনটিতে পাস করেছেন সেই ইন্টারফেসের আইপি ঠিকানা এটি, আপনি তৈরি করা একটি আইপি ঠিকানা, বা ??? আমি ছদ্মবেশ সংস্করণ যা দরকার নেই চেষ্টা --to-source, যেমন এখানে বর্ণিত , এবং যে কাজ!
এনটিসি

3
এই সমস্তগুলির জন্য রুট অ্যাক্সেসের প্রয়োজন বলে মনে হচ্ছে।
সরলগামী

15
netstat -taucp | grep <pid or process name>

এটি বন্দর ব্যবহার সহ কোনও অ্যাপ্লিকেশন তৈরি করছে এমন সংযোগগুলি দেখায়।


8
এটি তাত্ক্ষণিকভাবে বিদ্যমান সংযোগগুলি দেখায়, তবে এটি ট্র্যাফিকের কোনও লগ সরবরাহ করবে না।
কিস কুক

1
কিস কুক মন্তব্য সম্পর্কে নিশ্চিত নয়। একটি সাধারণ নেটস্পট তাত্ক্ষণিকভাবে সংযোগ সম্পর্কে তথ্য দেখায়, তবে পতাকা-সি দিয়ে আপনি প্রতি সেকেন্ডে সেই রাজ্যের একটি স্ন্যাপশট পান (দেখুন 'ম্যান নেটস্যাট')। সম্ভবত এতে সমস্ত ট্র্যাফিক না থাকলেও সংযোগগুলির একটি অনন্য স্ন্যাপশট নয়।
tremendows

3
ঠিক আছে, আমি নিশ্চিত। এটি কোনও প্রক্রিয়ার সমস্ত নেটওয়ার্ক ট্র্যাফিক ক্যাপচার করবে না
রেজিনিয়ার পোস্ট

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

11

কেবল একটি ধারণা: আপনার অ্যাপ্লিকেশনটি কোনও আলাদা আইপি ঠিকানার সাথে বাঁধাই সম্ভব? যদি তা হয় তবে আপনি সাধারণ সন্দেহভাজন ( tcpdump ইত্যাদি) ব্যবহার করতে পারেন

অ্যাপ্লিকেশনগুলির জন্য সরঞ্জামগুলি যা অন্য আইপি ঠিকানার সাথে আবদ্ধ হতে সক্ষম নয়:

http://freshmeat.net/projects/fixsrcip

fixsrcipবহির্মুখী টিসিপি এবং ইউডিপি ক্লায়েন্ট সকেট ( আইপিভি 4 ) কে একাধিক-হোমড হোস্টে নির্দিষ্ট উত্সের আইপি অ্যাড্রেসগুলিতে আবদ্ধ করার জন্য একটি সরঞ্জাম

http://freshmeat.net/projects/force_bind

force_bindআপনাকে একটি নির্দিষ্ট আইপি এবং / অথবা পোর্টে জোর করে বাধ্য করার অনুমতি দেয়। এটি আইপিভি 4 এবং আইপিভি 6 উভয়ের সাথেই কাজ করে ।


বেশিরভাগ অ্যাপ্লিকেশনগুলি তাদের উত্স আইপি নির্দিষ্ট করে সমর্থন করে না, তবে এটি সম্ভবত CLONE_NEWNET তবে CLONE_NEWNS নয় এমন একটি ধারক ব্যবহার করে সম্ভব হতে পারে।
কিস কুক

বিকল্পভাবে, আপনি একটি নেটওয়ার্ক নেমস্পেস তৈরি করতে পারেন এবং এর মধ্যে নিজের অ্যাপটি চালাতে পারেন www.evolware.org/?p=293
ফ্লিন্ট

9

আমি অনুরূপ ইস্যুতে এসেছি এবং আমি এখানে বর্ণিত এনএফএলওজি ব্যবহার করে আইওরর দ্বারা এই উত্তরটির ভিত্তিতে বাছাই করতে সক্ষম হয়েছি :

# iptables -A OUTPUT -m owner --uid-owner 1000 -j CONNMARK --set-mark 1
# iptables -A INPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
# iptables -A OUTPUT -m connmark --mark 1 -j NFLOG --nflog-group 30 
# dumpcap -i nflog:30 -w uid-1000.pcap

তারপরে আপনি কোনও ব্যবহারকারীর অ্যাকাউন্ট থেকে প্রশ্নে প্রক্রিয়াটি তৈরি করতে পারবেন যা অন্য কিছু করে না - এবং ভয়েলা, আপনি একক প্রক্রিয়া থেকে সবেমাত্র ট্র্যাফিককে বিচ্ছিন্ন এবং ক্যাপচার করেছেন।

এটি কারওর পক্ষে সহায়তা করার ক্ষেত্রে কেবল পোস্টটি পোস্ট করতে চেয়েছিল।


6

আমি একটি সি অ্যাপ্লিকেশন লিখেছিলাম যা ফিলাহাদব দ্বারা উপরের মহান উত্তরে বর্ণিত হয়েছে!

এখানে দেখুন: এনট্রেস গিথুব রেপো


এটি দুর্দান্ত, তবে আমি কীভাবে এটি ব্যবহার করতে এবং এটি ব্যবহার করতে পারি তার জন্য আরও কিছু বিশদ অন্তর্ভুক্ত করে ভাল লাগবে বলে মনে করি :)
Zanna

ধন্যবাদ! আমি গিথুব রেপোতে একটি লিঙ্ক সরবরাহ করেছি যা একটি README.md ফাইল ধারণ করে যার ব্যবহার এবং উদাহরণ রয়েছে এবং ডাউনলোডের নির্দেশাবলী রয়েছে!
জোনাস ড্যানিয়েলসন

5

এটি একটি নোংরা হ্যাক তবে আমি প্রদত্ত ইউআইডি-র জন্য iptables সহ একটি ডাইভার্ট বা লগ টার্গেটটি প্রস্তাব করব। উদাহরণ:

iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner $USER -m tcp -j LOG 
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner $USER -m udp -j LOG 

লগ লক্ষ্যটির জন্য এটি '--log-tcp-sequence', '--log-tcp-বিকল্প', '--log-ip-ਚੋਣਾਂ', '--log-uid' এর মতো কিছু অনুসন্ধান করাও উপযুক্ত worth । যদিও আমি সন্দেহ করি যে এটি আপনাকে কেবল একটি পিসিপ পোস্ট করতে সহায়তা করবে যাতে আরও এক টন অন্যান্য ডেটা রয়েছে।

আপনি যদি প্যাকেটগুলি পতাকাঙ্কিত করতে চান এবং তারপরে নির্দিষ্ট ট্যাগযুক্ত প্যাকেটগুলি আপনার পছন্দসই প্রক্রিয়াতে নেট লিঙ্ক সকেটের মাধ্যমে প্রেরণ করা হবে তবে এনএফএলজি লক্ষ্যটি কার্যকর হতে পারে। আমি অবাক হয়েছি যদি এটি ওয়্যারশার্ক এবং আপনার নির্দিষ্ট অ্যাপ্লিকেশনটি নির্দিষ্ট ব্যবহারকারী হিসাবে চলমান কোনও কিছু হ্যাক করার জন্য কার্যকর হয়?


তবে এটি কেবল আউটগোয়িংয়ের জন্যই কাজ করে, কী অযোগ্য?
resultsway

5

আপনি ট্রেসডাম্প চেষ্টা করতে পারেন - http://mutrics.iitis.pl/tracedump

এটি আপনি যা চান ঠিক তা করে, আপনি এটি কোনও প্রক্রিয়া আইডি বা কোনও প্রোগ্রাম চালাতে পারেন।


1
দুর্দান্ত প্রকল্প, তবে ... "ট্র্যাসড্যাম্প বর্তমানে কেবলমাত্র 32-বিট লিনাক্স হোস্টগুলিতে চলে" দুর্ভাগ্যক্রমে এটি আমার জন্য হত্যা করে।
gertvdijk

4

স্ট্রেসের অধীনে আপনার আগ্রহী প্রক্রিয়াটি চালনার চেষ্টা করুন :

strace ping www.askubuntu.com

এটি আপনার প্রক্রিয়াটি কী করছে সে সম্পর্কে আপনাকে কিছু বিশদ তথ্য দেবে। প্রক্রিয়াটি যে কোনও পোর্ট যে কোনও জায়গায় এটি খুলতে পারে, পূর্বনির্ধারিত ফিল্টার ব্যবহার করে আপনি কিছু মিস করতে পারেন।

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


"-E ট্রেস = নেটওয়ার্ক" এ যুক্ত করার ফলে আউটপুটটি কিছুটা কেটে যায়, যা আসলে নেটওয়ার্কে লেখা ডেটা হারানোর ব্যয়ে। আপনি যদি কেবল "সকেট খোলার সংখ্যা" বা এর অনুরূপ সম্পর্কে চিন্তা করেন তবে এটি জিনিসগুলিকে সহজ করে তোলে।
dannysauer

3

আইওরর দ্বারা উত্তরের ভিত্তিতে আমি সন্দেহ করি যে আপনি iptables --uid-ownerট্রাফিকের উপর একটি চিহ্নিতকারী স্থাপন করতে ব্যবহার করতে পারেন এবং তারপরে আপনি ওয়্যারশার্ককে কেবল সেই মার্কার দিয়ে কেবল ট্র্যাফিক ক্যাপচার করতে চাইতে পারেন। আপনি ডিএসসিপি (ডিফারেনশিয়াল সার্ভিস মার্কার), ফ্লো আইডি বা কোওস মার্কার ব্যবহার করতে সক্ষম হতে পারেন।

বা প্রকৃতপক্ষে আপনি এই প্যাকেটগুলি একটি অন্য ইন্টারফেসের বাইরে প্রেরণ করতে ব্যবহার করতে পারেন এবং তারপরে কেবল সেই ইন্টারফেসে ক্যাপচার করতে পারেন।



-1

হয়ত ইপটবেলস এবং ইউলগ কাজ করতে পারে? আমার কাছে একটি সঠিক রেসিপি রয়েছে তা নয়, তবে আমি মনে করি যে iptables প্রসেসগুলির সাথে মেলে ফেলতে পারে, একবার মিলে গেলে আপনি লগ ব্যবহার করতে পারেন।


3
দুর্ভাগ্যক্রমে, iptables -m owner --pid-owner $PIDলিনাক্স ২.6.১৪
কিস কুক

-1

আমি মনে করি আপনি নেটস্প্যাট চালিয়ে এবং এটি কোনও পাঠ্য ফাইলে লগ করার মাধ্যমে লুপ করতে একটি শেল স্ক্রিপ্ট তৈরি করতে পারেন। এর মতো কিছু (খুব রুক্ষ পদক্ষেপ):

echo "press q to quit"
while [ <q is not pressed>]
do
    `netstat -taucp | grep <pid or process name> 1>>logfile.txt`
done

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


যথেষ্ট ভাল না. প্রশ্নটি হ'ল সমস্ত নেটওয়ার্ক ট্র্যাফিককে ক্যাপচার করতে হবে , আপনি যা যা যা ঘটছেন ততক্ষণে সক্রিয় হওয়ার জন্য যা ঘটে তা ঘটে না।
রেইনিয়ার পোস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.