हैं मैं आपको सही ढंग से समझ रहा हूं, आप नेटवर्क-विशिष्ट सिस्टम कॉल के लिए मूल रूप से Linux 'strace' (Introduction) में रुचि रखते हैं?
संभावित रूप से नेटवर्क अनुप्रयोगों (यानी 'ntrace') के लिए एक प्रोफाइलर और डीबगर का संयोजन, विभिन्न वैकल्पिक मापों का विस्तृत विश्लेषण प्रदान करता है?
ptrace का उपयोग करना, यह डेटा है कि आप में रुचि रखते हैं के सबसे प्राप्त करने के लिए संभव हो जाना चाहिए।
Windows पर, आप शायद क्रम अवरोधन करने में detours में देखना चाहता हूँ/निरीक्षण/बेंचमार्किंग उद्देश्यों के लिए विंसॉक एपीआई कॉल को रीडायरेक्ट करें।
यदि आपको वास्तव में बहुत कम स्तर की जानकारी की आवश्यकता नहीं है, तो आप शायद सीधे स्ट्रेस (लिनक्स पर) का उपयोग भी कर सकते हैं और केवल कुछ सिस्टम कॉल का पता लगाने के लिए इसका उपयोग कर सकते हैं, उदाहरण के लिए निम्न पंक्ति पर विचार करें जो केवल कॉल का पता लगाएगा खुला syscall (अतिरिक्त -ओ फ़ाइल पैरामीटर का उपयोग करके आप कोई आउटपुट फ़ाइल के लिए सभी उत्पादन अनुप्रेषित कर सकते हैं):
strace -e trace=open -o results.log
एक अतिरिक्त -v ध्वज में उत्तीर्ण होकर strace के लिए, आप प्राप्त करने के लिए अपने शब्दाडंबर को बढ़ा सकते हैं अतिरिक्त जानकारी (एससीएम के साथ काम करते समय गिट जैसे कि कई छोटी खोल उपयोगिताओं और स्टैंडअलोन टूल्स से बना है, तो आप शायद -f का उपयोग करना भी चाहेंगे फोर्क प्रक्रियाओं का पालन करने के लिए ध्वज)।
तो, आप में रुचि होगी क्या, सभी syscalls कि sockets से जुड़े हुए हैं, अर्थात् है:
- स्वीकार
- बाँध
- कनेक्ट
- getpeername
- getsockname
- getsockopt
- सुनो
- recv
- recvfrom
- भेज
- sendto
- setsockopt
- बंद
- सॉकेट
- socketpair
(शुरुआत में, तो आप शायद ही चाहता हूँ प्रेषण से निपटने में देखो .../recv ... कॉल, यद्यपि)
इस आसान बनाने के लिए, आप भी "नेटवर्क" का उपयोग कर सकते पैरामीटर के रूप में पता लगाने के लिए है, जो सभी नेटवर्क-संबंधी कॉल का पता लगाने जाएगा:
-e ट्रेस = नेटवर्क: सभी नेटवर्क से संबंधित सिस्टम कॉल ट्रेस।
तो, एक इसी strace मंगलाचरण ऐसा दिखाई दे सकता:
strace -v -e trace=accept,bind,connect,getpeername,getsockname,getsockopt,listen,recv,recvfrom,send,sendto setsockopt,shutdown,socket,socketpair -o results.log -f git pull
जब कार्यक्रम चल रहा समाप्त हो गया है, तो आप मुख्य रूप से डेटा का मूल्यांकन करने के लिए लॉग फ़ाइल का परीक्षण भी कर सकते हैं इस नियमित अभिव्यक्तियों का उपयोग कर आसानी से हासिल किया जा सकता है।
उदाहरण के लिए, जब चल रहा है एक linux खोल में निम्नलिखित: strace -v -o wget.log -e trace=connect,recv,recvfrom,send,sendto wget http://www.google.com
जिसके परिणामस्वरूप लॉग फ़ाइल इस तरह के संदेशों में शामिल हैं:
- recv (3, "HTTP/1.0 302 मिली \ r \ nLocation: प्रस्तुति "..., 511, एमएसजी_PEEK) = 511
- sendto (4," \ 24 \ 0 \ 0 \ 0 \ 26 \ 0 \ 1 \ 3^\ 206 * जे \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 "..., 20, 0, {sa_family = AF_NETLINK, pid = 0, समूह = 00000000}, 12) = 20
इन दो सिस्टम कॉल के लिए मैन पेजों को देखते हुए, यह स्पष्ट है कि 511 और क्रमशः 20 स्थानांतरित किए गए बाइट्स की संख्या हैं।आप भी विस्तृत समय जानकारी की जरूरत है, तो आप strace को -टी ध्वज पारित कर सकते हैं:
-टी - प्रिंट समय प्रत्येक syscall में खर्च
इसके अलावा, आप पास करके कुछ आँकड़े प्राप्त कर सकते -सी ध्वज:
-c: प्रत्येक सिस्टम कॉल के लिए समय, कॉल और त्रुटियों की गणना करें और प्रोग्राम पर सारांश की रिपोर्ट करें। लिनक्स पर, यह सिस्टम घड़ी (कर्नेल में चलने वाला सीपीयू समय) दीवार घड़ी के समय से स्वतंत्र दिखाने का प्रयास करता है। अगर -सी का उपयोग -एफ या -एफ (नीचे) के साथ किया जाता है, तो सभी ट्रेस किए गए प्रक्रियाओं के लिए कुल कुल योग रखा जाता है।
आप भी कार्रवाई की वास्तविक डेटा की जांच करने की जरूरत है, तो आप पढ़ने/लिखने विनिर्देशक पर गौर कर सकते हैं:
पढ़ -e = सेट: एक पूर्ण षोडश आधारी और सभी के लिए ASCII डंप प्रदर्शन निर्दिष्ट सेट में सूचीबद्ध फ़ाइल वर्णनकर्ताओं से डेटा पढ़ा गया। उदाहरण के लिए, फ़ाइल डिस्क्रिप्टर 3 और 5 उपयोग -e पढ़ने = 3,5 पर सभी इनपुट गतिविधि देखने के लिए। ध्यान दें कि यह सामान्य से पढ़ने योग्य (2) सिस्टम कॉल का ट्रेसिंग है जो विकल्प -e trace = read द्वारा नियंत्रित होता है। -e लिखें = सेट: निर्दिष्ट सेट में सूचीबद्ध डिस्क्रिप्टर फ़ाइल करने के लिए लिखे गए सभी डेटा का पूर्ण हेक्साडेसिमल और ASCII डंप करें। उदाहरण के लिए, फ़ाइल डिस्क्रिप्टर 3 और 5 उपयोग -e लिखने = 3,5 पर सभी आउटपुट गतिविधि देखने के लिए। ध्यान दें कि यह सामान्य लेखन (2) सिस्टम कॉल का पता लगाने से स्वतंत्र है जिसे विकल्प -e trace = write द्वारा नियंत्रित किया जाता है।
तुम भी तार की अधिकतम लंबाई अनुकूलित कर सकते हैं:
-s strsize: अधिकतम स्ट्रिंग आकार निर्दिष्ट करें मुद्रित करने के लिए (डिफ़ॉल्ट 32 है)। ध्यान दें कि फ़ाइल नाम तार नहीं माना जाता है और हमेशा पूर्ण
में मुद्रित कर रहे हैं या फिर तार हेक्स के रूप में फेंक दिया जा है
-xx: हेक्साडेसिमल स्ट्रिंग प्रारूप में सभी स्ट्रिंग्स प्रिंट।
तो, यह के ज्यादा के लिए strace का उपयोग कर, एक अच्छा संकर दृष्टिकोण की तरह लगता है क्योंकि यह करने के लिए बहुत आसान है, लेकिन अभी भी वहाँ कम स्तर की जानकारी का एक अच्छा राशि उपलब्ध है, यदि आप पाते हैं कि आप अतिरिक्त कम की जरूरत है स्तर की जानकारी, आप strace project on sourceforge के साथ संबंधित फीचर अनुरोधों को दर्ज करने या दर्ज करने पर विचार करना चाह सकते हैं।
हालांकि, इसके बारे में कुछ और सोचना, एक साधारण नेटवर्क यातायात बेंचमार्क को लागू करने के लिए एक कम शामिल और अधिक प्लेटफार्म-अज्ञेय तरीका, क्लाइंट और वास्तविक सर्वर के बीच इंटरमीडिएट परत के कुछ रूपों का उपयोग करना होगा: ए सर्वर जो वास्तविक रूप से वास्तविक सर्वर पर यातायात का विश्लेषण, विश्लेषण और पुनर्निर्देशन कर रहा है।
प्रॉक्सी सर्वर (उदा। SOCKS) की तरह बहुत अधिक है, ताकि सभी ट्रैफ़िक आपके विश्लेषक के माध्यम से सुरंग हो जाएं, जो बदले में आंकड़े और अन्य मीट्रिक जमा कर सकता है।
कुछ इस तरह का एक मूल संस्करण शायद आसानी से बस netcat और कुछ शेल स्क्रिप्ट का उपयोग करके एक साथ रखा जा सकता है, और अधिक जटिल संस्करणों लेकिन बजाय पर्ल या अजगर का उपयोग करने से लाभ हो सकता है।
एक सॉक्स सर्वर की एक अजगर कार्यान्वयन के लिए, आप pysocks पर गौर कर सकते हैं।
इसके अलावा, वहाँ अजगर के लिए पाठ्यक्रम twisted की है:
मुड़ एक घटना पर ही आधारित नेटवर्किंग अजगर में लिखा और एमआईटी लाइसेंस के अंतर्गत लाइसेंस इंजन है।
यदि आपको अधिक निम्न स्तर की जानकारी रखने की आवश्यकता है, तो आप शायद वास्तव में सिस्टम कॉल को अवरुद्ध करना चाहते हैं।
आप भी प्रोटोकॉल विशेष दक्षता डेटा की जरूरत है, तो आप tcpdump में देखना चाहते हो सकता है।
आप पूछ रहे हैं, कैसे आदेश एक मनमाना नेटवर्क कार्यक्रम के लिए इस तरह के मानक के साथ आने के लिए आवश्यक डेटा प्राप्त करने के लिए? – none
हां, मैं कम से कम कुल बाइट्स को स्थानांतरित करना चाहता हूं और शायद किसी दिए गए कमांड के लिए पढ़ने के लिए पढ़ने से परिवर्तनों की संख्या, सीपीयू और मेमोरी के लिए समय/समय, और I/O के लिए सिस्टमटैप iotimes जैसे कुछ प्राप्त करना चाहते हैं। –
मुझे लगता है कि वास्तव में आपके प्रश्न का उत्तर देने के लिए, आपको आदर्श रूप से हमें अपने पसंदीदा प्लेटफ़ॉर्म/ओएस के साथ-साथ अपनी पसंदीदा प्रोग्रामिंग भाषा के बारे में और बताएं। साथ ही, माप की विस्तृत सूची जिसमें आप रुचि रखते हैं, हमें बताएगा कि कौन सा दृष्टिकोण सबसे व्यवहार्य है। – none