tcpdump के बिना डंप tcp कनेक्शन


17

एक सेंटो बॉक्स पर, मुझे tcp कनेक्शन डंप करना पसंद है - मैं यह देखना चाहूंगा कि क्या कोई सर्वर एक निश्चित आईपी के लिए अनुरोध भेजने की कोशिश करता है। आमतौर पर tcpdump चाल करता है - लेकिन tcpdump स्थापित नहीं होता है, और सॉफ़्टवेयर स्थापित करना कोई विकल्प नहीं है (कंपनी नीति के कारण)। मुझे डर है कि नेटस्टैट मुझे एक भी अनुरोध नहीं दिखाएगा।

इसलिए मैं सोच रहा था कि मेरे पास और क्या विकल्प हैं। मेरे पास सर्वर पर रूट एक्सेस है।


क्या आपके पास सर्वर पर रूट एक्सेस है?
user9517

हां, मेरे पास रूट एक्सेस है।
इसहाक

11
आपको कंपनी की नीति को ठीक करने पर भी काम करना चाहिए। जब यह आपको अपना काम करने से रोकता है, तो पॉलिसी टूट जाती है।
माइकल हैम्पटन

1
ठीक है, अपने मूल रूप से एफडीए की आवश्यकता पर नियंत्रण बदलें - इसलिए कुछ भी नहीं मैं इस जीवन में बदल
इसहाक

जवाबों:


15

निश्चित रूप से आपके पास है python?

from socket import * 
from struct import unpack 
import sys 

INTERFACE = "eth0"
TARGET = "8.8.8.8" 

if __name__ == "__main__": 
  sock = socket(AF_PACKET, SOCK_DGRAM, 0x0800) 
  sock.bind((INTERFACE, 0x0800)) 
  while True: 
    data = sock.recvfrom(1500, 0)[0] 
    ip = inet_ntop(AF_INET, data[12:16]) 
    if ip == TARGET: 
      print "GOT TARGET" 
      sys.exit(1)

यह "GOT TARGET" के साथ बाहर निकलेगा जो आईपी एड्रेस वापस आने वाले पते प्रदान करेगा। चूंकि टीसीपी को एक हैंडशेक के दौरान कुछ वापस भेजना है, इसलिए इसे किसी विशिष्ट लक्ष्य पते से कुछ भी पकड़ना चाहिए। अगर प्रोटोकॉल टीसीपी या यूडीपी है, तो इसकी परवाह नहीं है (और न ही मैं जांच करता हूं)।

TARGET और INTERFACE बदलना न भूलें।


Tcp syn पैकेट को पकड़ने के लिए आप इसे कैसे संशोधित करेंगे? क्योंकि अगर लक्ष्य तक पहुँच नहीं है, एक असफल लेकिन असफल कनेक्शन नहीं दिखाएगा।
इसहाक

3
क्या यह स्क्रिप्ट एक नया सॉफ़्टवेयर नहीं है (इसलिए सिस्टम में स्थापित नहीं होना है)?
वि।

@ उस तर्क के साथ, आप तर्क दे सकते हैं कि कोई भी शेल स्क्रिप्ट 'नया सॉफ्टवेयर' है। यह निर्भर करता है कि आप 'सॉफ्टवेयर' को कैसे परिभाषित करते हैं।
मैथ्यू इफ

1
-1 क्षमा करें, यह एक भयानक समाधान है। न केवल यह एक मशीन गन के साथ एक चिकन को मार रहा है (ऐसा करने के लिए एक कार्यक्रम लिख रहा है जो पहले से ही एक समाधान है), लेकिन यह एक अनंत लूप है- अनावश्यक रूप से सीपीयू संसाधनों का उपभोग करना (पायथन प्रक्रिया पर एक स्ट्रेस चलाएं ... लेकिन खड़े रहें) नियंत्रण-सी कुंजी!), यह उपयोगकर्ता के प्रश्न को ठीक से हल करने में विफल रहता है: यह आने वाले और बाहर जाने वाले दोनों टीसीपी कनेक्शनों के लिए "GOT TARGET" का जवाब देगा (उपयोगकर्ता ने "अनुरोध भेजने की कोशिश करता है ...")। अंत में यह सफलता के 1 (शेल में विफलता का संकेत) के साथ बाहर निकलता है।
माइक एस

1
बहुत अच्छा है, लेकिन आपको अभी भी इसके लिए एलिवेटेड अनुमतियां चाहिए। मुझे मिलाsocket.error: (1, 'Operation not permitted')
ग्रांट बोमन

17

मैं वास्तव में tcpdump प्राप्त करने की कोशिश करूँगा। कहा जा रहा है, यह देखने के लिए कि कुछ विकल्प एक आईपी के लिए एक निश्चित कनेक्शन मौजूद हैं:

strace:

[kbrandt@ny-kbrandt01: ~] strace -e trace=network nc 1.2.3.4 1234
...
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
connect(3, {sa_family=AF_INET, sin_port=htons(1234), sin_addr=inet_addr("1.2.3.4")}, 16) = -1 EINPROGRESS (Operation now in progress)

lsof:

[kbrandt@ny-kbrandt01: ~] nc 1.2.3.4 1234 &
[1] 11434
[kbrandt@ny-kbrandt01: ~] lsof -p 11434
....
nc      11434 kbrandt    3u  IPv4 4543149      0t0     TCP 10.7.0.78:58886->1.2.3.4:search-agent (SYN_SENT)

netstat:

[kbrandt@ny-kbrandt01: ~] nc 1.2.3.4 1234 &
[1] 11486
[kbrandt@ny-kbrandt01: ~] sudo netstat -a -p | grep 11486
tcp        0      1 10.7.0.78:58891             1.2.3.4:search-agent        SYN_SENT    11486/nc

1
मैं जिस तरह के जवाब की उम्मीद कर रहा था, वह वैसा ही था। Unfortunatly स्ट्रेस भी स्थापित नहीं है: /
इसहाक

मैं lsof की कोशिश करूंगा
आइजैक

1
मुझे लगता है कि मूल पोस्टर को उत्तर पसंद आया था, लेकिन अजीब तरह से यह वास्तव में उनके सवाल का जवाब नहीं देता है ("... टीसीपी कनेक्शन - मैं यह देखना चाहूंगा कि क्या कोई सर्वर एक निश्चित आईपी पर अनुरोध भेजने की कोशिश करता है ...)।" आपको किसी विशेष प्रक्रिया के लिए नेटवर्क कनेक्शन की जानकारी देते हैं ... शायद वह ऐसा चाहता है; मेरे जैसे उन लोगों के लिए जो एक मशीन से टीसीपी कनेक्शन के बारे में जानकारी प्राप्त करने के लिए यहां आते हैं, हो सकता है कि यह चाल न चले। लेकिन एक नंबर दिखाने के लिए सहारा। विभिन्न शेल कमांड उदाहरण जो आपको अपने नेटवर्क कनेक्शन के बारे में जानकारी इकट्ठा करने की अनुमति देते हैं।
माइक एस

15

Iptables की डिबग क्षमता है और इसका उपयोग ट्रैफ़िक विश्लेषण के लिए भी किया जा सकता है।

समाधान नीचे दिए गए URL पर वर्णित है।

Iptables में डिबगिंग नियम

अपनी पसंद की फ़ाइल में ट्रेस आउटपुट की लॉगिंग सेट करने के लिए निम्न URL पढ़ना भी उचित है।

http://backreference.org/2010/06/11/iptables-debugging/

मैं इस समाधान को tcpdump के बराबर नहीं मानूंगा, लेकिन यह Centos की एक न्यूनतम स्थापना का उपयोग करके किया जा सकता है। आपको लॉग के साथ डिस्क को न भरने के लिए सावधान रहने की आवश्यकता है, क्योंकि tcpdump डिस्क उपयोग में बहुत अधिक कुशल है। जब आवश्यकता न हो तब लॉगिंग बंद कर दें।

आप अपनी स्क्रिप्ट में मूल टेम्पलेट के रूप में निम्नलिखित का उपयोग कर सकते हैं।

# Logging
log(){
SOURCE=a.b.c.d (IP address)
$IPT -A INPUT   -s $SOURCE -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "In: "
$IPT -A OUTPUT  -s $SOURCE -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "Out: "
$IPT -A FORWARD -s $SOURCE -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "Fw: "
$IPT -t nat -A POSTROUTING -m limit --limit 50/minute -j LOG --log-level 7 --log-prefix "Nat: "
}
#log  (remove comment to enable)

trace(){
iptables -t raw -A PREROUTING -p tcp  -j TRACE
iptables -t raw -A OUTPUT     -p tcp  -j TRACE
}
#trace (remove comment to enable)

8

यदि आपको अपना काम करने के लिए विशिष्ट सॉफ़्टवेयर की आवश्यकता है, और आपको अनुमति नहीं है, तो आप या तो एक अच्छा व्यापार मामला नहीं बना रहे हैं या अपने विचारों को सही लोगों को बेच रहे हैं ... या आप इस प्रणाली के नियंत्रण में नहीं हैं .. ।

अगर मुझे कुछ करने का काम सौंपा गया और आपको इस मामले में डिबगिंग / समस्या निवारण जानकारी के प्रकार की आवश्यकता है, तो मैं सही उपकरण का उपयोग करूँगा। इसकी संभावना है tcpdumpया tshark। हाँ, वे सॉफ्टवेयर के टुकड़े हैं, लेकिन मैं उन्हें और अधिक आवश्यक उपयोगिताओं के बारे में बताऊंगा । वास्तव में, वे उपयोगिताओं हैं जिन्हें सिस्टम पर अस्थायी रूप से स्थापित या लोड किया जा सकता है और बिना घटना के हटाया जा सकता है (हटाने योग्य मीडिया एक विकल्प है? ... int )

लेकिन मुद्दा यह है कि कंपनी की नीति के लिए एक मज़ेदार वर्कअराउंड संभवतः इस उपयोग के मामले के लिए अनुमोदन प्राप्त करने की तुलना में अधिक प्रयास करता है।


मैं सही काम के लिए सही उपकरण का उपयोग करने पर पूरी तरह सहमत हूं। वास्तव में, मैं सॉफ़्टवेयर स्थापित कर सकता हूं, लेकिन हमें परिवर्तन नियंत्रण का उपयोग करना होगा, इसलिए प्रक्रिया में कुछ दिन लगते हैं - मुझे अभी डंप की आवश्यकता थी, इसलिए स्थापित करना एक विकल्प नहीं था। मैं सोच रहा था कि क्या मैं कुछ विकल्पों को नजरअंदाज करता हूं, इसके बारे में अभी तक नहीं सोचा है।
इसहाक

:( बदलाव-प्रबंधन के बारे में। क्या कोई ऐसा तरीका है जिससे राजनीतिक खेल खेला जा सके और लोगों / पार्टियों को डंप से फायदा हो, जो बदलाव-प्रबंधन प्रक्रिया को तेज कर सके?
evhite

1
मुझे डर नहीं है - लेकिन चूंकि इसके ग्राहक को परिवर्तन-प्रबंधन की आवश्यकता है और tcpdump की भी आवश्यकता है, इसलिए उसे तथ्यों को स्वीकार करना होगा। मुझे उम्मीद थी कि मैं उसे किसी भी तरह खुश कर सकता हूं।
इसहाक

3
@ नई: किसी भी अच्छी परिवर्तन प्रबंधन नीति में विशिष्ट या पूर्ण कक्षाओं को छूट देने की क्षमता होनी चाहिए, पूर्ण प्रक्रिया से गुजरने से परिवर्तन। यदि यह नहीं होता है ....
स्कॉट पैक

2
क्या आप tcpdumpकहीं और से एक सांख्यिकीय रूप से जुड़ा हुआ संकलन नहीं कर सकते हैं, और बस इसे कॉपी / tmp और वहां से चला सकते हैं?
चे

5

काइल ने कुछ बेहतरीन विकल्प पेश किए। एक और उपयोग करना होगा iptables:

[james@server ~]$ sudo iptables -I OUTPUT -d 1.2.3.4/32
...
[james@server ~]$ sudo iptables -L OUTPUT -n -v
Chain OUTPUT (policy ACCEPT 105 packets, 35602 bytes)
 pkts bytes target  prot opt in  out  source      destination
   87 33484 LOG     all  --  *   *    0.0.0.0/0   1.2.3.4     LOG flags 0 level 4

यह अनिवार्य रूप से एक लेखा नियम है। यह स्पष्ट रूप से ट्रैफ़िक की अनुमति या अस्वीकार नहीं करता है, इसलिए OUTPUT श्रृंखला के लिए डिफ़ॉल्ट नीति का उपयोग किया जाता है (जो ACSTPT को चूक करता है)। हालांकि, कोई भी मिलान पैकेट नियम के लिए काउंटरों को बढ़ाएगा।

आप वैकल्पिक रूप से -j LOGविकल्प के साथ पैकेट के बारे में विवरण भी लॉग इन कर सकते हैं :

[james@server ~]$ sudo iptables -I OUTPUT -d 1.2.3.4/32 -j LOG
...
[james@server ~]@ dmesg | grep 1.2.3.4 | tail -1
IN= OUT=eth0 SRC=192.168.1.1 DST=1.2.3.4 LEN=100 TOS=0x10 PREC=0x00 TTL=64 ...

लॉग कर्नेल लॉगिंग सुविधा में जाएंगे, इसलिए इसे रेड हैट डेरिवेटिव्स पर / var / log / संदेशों में दिखना चाहिए और डेबियन डेरिवेटिव पर /var/log/kern.log। यह आउटपुट में भी दिखाई देगा dmesg, जैसा कि दिखाया गया है। tcpdumpहालांकि, इसके विपरीत , यह पैकेट की पूरी सामग्री को लॉग नहीं करेगा, केवल पैकेट हेडर की सामग्री।


मैं खुद को iptables के बारे में सोच रहा था, लेकिन यह भी स्थापित नहीं है: /। वैसे भी, अच्छा समाधान।
इसहाक

3

चूँकि आपका सर्वर एक निश्चित आईपी से जुड़ रहा है, मुझे लगता है कि यह एक ऐसे पोर्ट के लिए होगा जिसका आपको ज्ञान है?

किसी भी मामले में, netstatया ssजो आप चाहते हैं उसे करने के लिए डिज़ाइन किया गया है। आप कमांड के साथ भी ऐसा कर सकते हैं:

netstat -n -t | awk '{print $5}' | grep A.B.C.D:n
ss      -n -t | awk '{print $5}' | grep A.B.C.D:n

जहाँ A.B.C.Dएक IPv4 पता n दर्शाता है , और एक पोर्ट नंबर का प्रतिनिधित्व करता है जो आपका सर्वर दूरस्थ पक्ष से कनेक्ट हो रहा है। उदाहरण के लिए:

ss      -n -t | awk '{print $5}' | grep 10.137.54.22:3389

या, यदि आप जानना चाहते हैं कि कनेक्शन बना है:

ss      -n -t | awk '{print $5}' | grep -q 10.137.54.22:3389 && echo "CONNECTION MADE"

यदि आप उस पोर्ट नंबर को नहीं जानते हैं जिसे आप कनेक्ट करने का प्रयास कर रहे हैं, तो नौकरी अधिक कठिन होगी क्योंकि टीसीपी डेटा और एसीके पैकेट के लिए बातचीत के दोनों तरफ एक पोर्ट खोलेगा। उस मामले में आप आईपी पते के लिए बस यह बता सकते हैं कि कोई कनेक्शन बनाया गया है, चाहे वह उस से हो या उससे।

अंत में, आप इसे अपने मॉनिटरिंग टूल के रूप में उपयोग करने के लिए अपने दिल की सामग्री को लूप कर सकते हैं:

while true; do
    ss -n -t | awk '{print $5}' | grep -q A.B.C.D:n && \
        echo "CONNECTION MADE" && \
        exit 0
    sleep 1
done

उन्नत कर्नेल विशेषाधिकार की आवश्यकता के बिना निगरानी करने का शानदार तरीका।
ग्रांट बोमन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.