nc — αυθαίρετες συνδέσεις TCP και UDP και ακρόαση
ΣΥΝΤΑΞΗ
nc [-46bCDdFhklNnrStUuvZz] [-I μήκος] [-i διάστημα] [-M ttl] [-m minttl] [-O μήκος]
[-P όνομα_χρήστη_proxy] [-p πηγαία_θύρα] [-q δευτερόλεπτα] [-s πηγαία_διεύθυνση] [-T λέξη_κλειδί] [-V rtable]
[-W όριο_λήψης] [-w χρονικό_όριο] [-X πρωτόκολλο_proxy] [-x διεύθυνση_proxy[:θύρα]] [προορισμός] [θύρα]
ΠΕΡΙΓΡΑΦΗ
Το βοηθητικό πρόγραμμα nc (ή netcat) χρησιμοποιείται για σχεδόν οτιδήποτε αφορά TCP, UDP ή sockets τομέα Unix. Μπορεί να ανοίξει συνδέσεις TCP, να στείλει πακέτα UDP, να ακούσει σε αυθαίρετες θύρες TCP και UDP, να κάνει σάρωση θυρών και να χειρίζεται τόσο IPv4 όσο και IPv6. Σε αντίθεση με το telnet(1), το nc εκτελεί σωστά σενάρια και διαχωρίζει τα μηνύματα σφάλματος στην τυπική έξοδο αντί να τα στέλνει στην τυπική έξοδο, όπως το telnet(1) κάνει σε ορισμένες περιπτώσεις.
Οι συνήθεις χρήσεις περιλαμβάνουν:
απλές προξενικές TCP
πελάτες και διακομιστές HTTP βάσει σεναρίων
δοκιμές δικτυακών υπηρεσιών
ένας διακομιστής μεσολάβησης SOCKS ή HTTP για το [ssh]({filename}../../ssh)(1)
και πολλά, πολλά άλλα
Οι επιλογές είναι οι εξής:
-4 Χρήση μόνο διευθύνσεων IPv4.
-6 Χρήση μόνο διευθύνσεων IPv6.
-b Επιτρέπει τη μετάδοση.
-C Αποστολή CRLF ως τερματισμού γραμμής. Κάθε χαρακτήρας τροφοδοσίας γραμμής (LF) από τα δεδομένα εισόδου
μεταφράζεται σε CR+LF πριν γραφτεί στην υποδοχή. Οι χαρακτήρες τροφοδοσίας γραμμής που ήδη προηγούνται ενός χαρακτήρα επιστροφής φορέα (CR) δεν μεταφράζονται. Τα ληφθέντα δεδομένα δεν επηρεάζονται.
-D Ενεργοποίηση της αποσφαλμάτωσης στην υποδοχή.
-d Μην επιχειρήσετε να διαβάσετε από την τυπική είσοδο.
-F Μετάδοση της πρώτης συνδεδεμένης υποδοχής χρησιμοποιώντας το sendmsg(2) στην τυπική έξοδο και έξοδος. Αυτό είναι χρήσιμο
σε συνδυασμό με το -X για να κάνει το nc να εκτελεί τη ρύθμιση σύνδεσης με ένα proxy, αλλά στη συνέχεια να αφήσει
το υπόλοιπο της σύνδεσης σε ένα άλλο πρόγραμμα (π.χ. [ssh]({filename}../../ssh)(1) χρησιμοποιώντας το ssh_config(5)
επιλογή ProxyUseFdpass). Δεν μπορεί να χρησιμοποιηθεί με το -U.
-h Εμφάνιση του κειμένου βοήθειας του nc και έξοδος.
-I μήκος
Καθορίστε το μέγεθος του buffer λήψης TCP.
-i διάστημα
Καθυστέρηση για διάστημα δευτερολέπτων μεταξύ γραμμών κειμένου που αποστέλλονται και λαμβάνονται. Επίσης, προκαλεί μια χρονική καθυστέρηση μεταξύ συνδέσεων σε πολλές θύρες.
-k Όταν ολοκληρωθεί μια σύνδεση, ακούστε για μια άλλη. Απαιτεί το -l. Όταν χρησιμοποιείται μαζί
με την επιλογή -u, η υποδοχή του διακομιστή δεν είναι συνδεδεμένη και μπορεί να λάβει πακέτα UDP
από πολλούς κεντρικούς υπολογιστές.
-l Ακούστε για μια εισερχόμενη σύνδεση αντί να ξεκινήσετε μια σύνδεση σε έναν απομακρυσμένο κεντρικό υπολογιστή.
Ο προορισμός και η θύρα για ακρόαση μπορούν να καθοριστούν είτε ως μη προαιρετικά ορίσματα, είτε με τις επιλογές -s και -p, αντίστοιχα. Δεν μπορεί να χρησιμοποιηθεί μαζί με τα -x ή -z. Επιπλέον, οποιαδήποτε χρονικά όρια που καθορίζονται με την επιλογή -w παραβλέπονται.
-M ttl Ορίστε το TTL / όριο hop των εξερχόμενων πακέτων.
-m minttl
Ζητήστε από τον πυρήνα να απορρίψει τα εισερχόμενα πακέτα των οποίων το TTL / όριο hop είναι μικρότερο από το minttl.
-N [shutdown]({filename}../../shutdown)(2) την υποδοχή δικτύου μετά το EOF στην είσοδο. Ορισμένοι διακομιστές απαιτούν αυτό για να ολοκληρώσουν την εργασία τους.
-n Μην εκτελείτε ανάλυση ονομάτων τομέα. Εάν ένα όνομα δεν μπορεί να επιλυθεί χωρίς DNS, θα αναφερθεί ένα σφάλμα.
-O length
Καθορίστε το μέγεθος του ρυθμιστικού χώρου αποστολής TCP.
-P proxy_username
Καθορίζει ένα όνομα χρήστη που θα παρουσιαστεί σε έναν διακομιστή μεσολάβησης που απαιτεί έλεγχο ταυτότητας. Εάν δεν καθοριστεί όνομα χρήστη, ο έλεγχος ταυτότητας δεν θα επιχειρηθεί. Ο έλεγχος ταυτότητας μεσολάβησης υποστηρίζεται μόνο για διακομιστές HTTP CONNECT προς το παρόν.
-p source_port
Καθορίστε τη θύρα προέλευσης που θα χρησιμοποιήσει το nc, υπόκειται σε περιορισμούς δικαιωμάτων και διαθεσιμότητα.
-q seconds
Μετά το EOF στην είσοδο, περιμένετε τον καθορισμένο αριθμό δευτερολέπτων και, στη συνέχεια, τερματίστε. Εάν τα δευτερόλεπτα είναι αρνητικά, περιμένετε για πάντα (από προεπιλογή). Ο καθορισμός μη αρνητικών δευτερολέπτων υποδηλώνει το -N.
-r Επιλέξτε θύρες προέλευσης και/ή προορισμού τυχαία αντί να τις χρησιμοποιείτε διαδοχικά σε ένα εύρος ή με την σειρά που τις εκχωρεί το σύστημα.
-S Ενεργοποιήστε την επιλογή υπογραφής TCP MD5 RFC 2385.
-s sourceaddr
Ορίστε τη διεύθυνση προέλευσης από την οποία θα αποστέλλονται τα πακέτα, κάτι που είναι χρήσιμο σε μηχανές με πολλαπλές διεπαφές. Για υποδοχές datagram Unix-domain, καθορίζει το τοπικό προσωρινό αρχείο υποδοχής για δημιουργία και χρήση, ώστε τα datagram να μπορούν να ληφθούν. Δεν μπορεί να χρησιμοποιηθεί μαζί με το -x.
-T keyword
Αλλάξτε την τιμή κλάσης κυκλοφορίας IPv4 TOS/IPv6. Η λέξη-κλειδί μπορεί να είναι μία από τις εξής: critical, inetcontrol, lowcost, lowdelay, netcontrol, throughput, reliability ή μία από τις τιμές κώδικα DiffServ: ef, af11 ... af43, cs0 ... cs7 ή ένας αριθμός σε δεκαεξαδική ή δεκαδική μορφή.
-t Αποστείλετε απαντήσεις RFC 854 DON'T και WON'T σε αιτήματα RFC 854 DO και WILL. Αυτό καθιστά δυνατή τη χρήση του nc για τη δημιουργία σεναρίων συνεδριών telnet.
-U Χρησιμοποιήστε υποδοχές Unix-domain. Δεν μπορεί να χρησιμοποιηθεί μαζί με τα -F ή -x. Στο Linux, εάν το όνομα ξεκινά με ένα σύμβολο @, διαβάζεται ως υποδοχή χώρου ονομάτων abstract: το αρχικό @ αντικαθίσταται με ένα byte NULL πριν από τη σύνδεση ή τη δημιουργία σύνδεσης. Για λεπτομέρειες, δείτε το unix(7).
-u Χρησιμοποιήστε UDP αντί για TCP. Δεν μπορεί να χρησιμοποιηθεί μαζί με το -x. Για υποδοχές Unix-domain, χρησιμοποιήστε μια υποδοχή datagram αντί για μια υποδοχή stream. Εάν χρησιμοποιείται μια υποδοχή Unix-domain, δημιουργείται μια προσωρινή υποδοχή λήψης στο /tmp, εκτός εάν δοθεί η σημαία -s.
-V rtable
Ορίστε τον πίνακα δρομολόγησης που θα χρησιμοποιηθεί.
-v Παράγετε πιο λεπτομερείς πληροφορίες εξόδου.
-W recvlimit
Τερματίστε μετά τη λήψη recvlimit πακέτων από το δίκτυο.
-w timeout
Οι συνδέσεις που δεν μπορούν να δημιουργηθούν ή είναι σε αδράνεια λήγουν μετά από timeout δευτερόλεπτα. Η σημαία -w δεν έχει καμία επίδραση στην επιλογή -l, δηλαδή το nc θα ακούει για πάντα για μια σύνδεση, με ή χωρίς τη σημαία -w. Η προεπιλογή είναι η μη ύπαρξη χρονικού ορίου.
-X proxy_protocol
Χρησιμοποιήστε το proxy_protocol όταν επικοινωνείτε με τον διακομιστή διαμεσολάβησης. Τα υποστηριζόμενα πρωτόκολλα είναι 4 (SOCKS 4, 4A (SOCKS v.4A), 5 (SOCKS v.5) και connect (διακομιστής διαμεσολάβησης HTTPS). Εάν το πρωτόκολλο δεν καθοριστεί, χρησιμοποιείται η έκδοση SOCKS 5. Σημειώστε ότι το πρωτόκολλο SOCKS v.4 είναι πολύ περιορισμένο και μπορεί να χρησιμοποιηθεί μόνο όταν ο προορισμός μπορεί να επιλυθεί σε μια διεύθυνση IPv4. Τα άλλα πρωτόκολλα περνούν τον προορισμό ως συμβολοσειρά για να ερμηνευτεί από τον απομακρυσμένο διακομιστή διαμεσολάβησης και δεν έχουν αυτόν τον περιορισμό.
-x proxy_address[:port]
Συνδεθείτε στον προορισμό χρησιμοποιώντας έναν διακομιστή διαμεσολάβησης στη διεύθυνση proxy_address και τη θύρα. Εάν η θύρα δεν καθοριστεί, χρησιμοποιείται η γνωστή θύρα για το πρωτόκολλο διαμεσολάβησης (1080 για SOCKS, 3128 για HTTPS). Μια διεύθυνση IPv6 μπορεί να καθοριστεί ρητά περικλείοντας το proxy_address σε αγκύλες. Δεν μπορεί να χρησιμοποιηθεί διαμεσολαβητής με καμία από τις επιλογές -lsuU.
-Z Λειτουργία DCCP.
-z Σάρωση μόνο για ακούοντες δαίμονες, χωρίς να αποστέλλονται δεδομένα σε αυτούς. Δεν μπορεί να χρησιμοποιηθεί μαζί με την επιλογή -l.
ο προορισμός μπορεί να είναι μια αριθμητική διεύθυνση IP ή ένα συμβολικό όνομα κεντρικού υπολογιστή (εκτός εάν δοθεί η επιλογή -n).
Γενικά, πρέπει να καθοριστεί ένας προορισμός, εκτός εάν δοθεί η επιλογή -l (οπότε χρησιμοποιείται ο τοπικός κεντρικός υπολογιστής). Για υποδοχές τομέα Unix, απαιτείται ένας προορισμός και είναι η διαδρομή υποδοχής για σύνδεση (ή ακρόαση, εάν δοθεί η επιλογή -l).
η θύρα μπορεί να καθοριστεί ως αριθμητικός αριθμός θύρας ή ως όνομα υπηρεσίας. Μπορούν να καθοριστούν εύρη θυρών ως αριθμητικοί αριθμοί θυρών της μορφής nn-mm. Γενικά, πρέπει να καθοριστεί μια θύρα προορισμού, εκτός εάν δοθεί η επιλογή -U. Για ορισμένες επιλογές, η τιμή 0 υποδεικνύει ότι το σύστημα πρέπει να επιλέξει έναν αριθμό θύρας.
ΜΟΔΕΛΟ ΠΕΛΑΤΗ/ΔΙΑΚΟΜΙΣΤΗ
Είναι αρκετά απλό να δημιουργήσετε ένα βασικό μοντέλο πελάτη/διακομιστή χρησιμοποιώντας το nc. Στην πρώτη κονσόλα, ξεκινήστε το nc ακούγοντας σε μια συγκεκριμένη θύρα για μια σύνδεση. Για παράδειγμα:
$ nc -l 1234
Το nc ακούει τώρα στη θύρα 1234 για μια σύνδεση. Στη δεύτερη κονσόλα (ή σε μια δεύτερη μηχανή), συνδεθείτε στη μηχανή και στη θύρα στην οποία γίνεται η ακρόαση:
$ nc -N 127.0.0.1 1234
Τώρα θα πρέπει να υπάρχει μια σύνδεση μεταξύ των θυρών. Οτιδήποτε πληκτρολογείται στη δεύτερη κονσόλα θα συνενώνεται στην πρώτη, και το αντίστροφο. Αφού δημιουργηθεί η σύνδεση, το nc δεν νοιάζεται πραγματικά ποια πλευρά χρησιμοποιείται ως «διακομιστής» και ποια ως «πελάτης». Η σύνδεση μπορεί να τερματιστεί χρησιμοποιώντας ένα EOF («^D»), επειδή δόθηκε η σημαία -N.
Δεν υπάρχει επιλογή -c ή -e σε αυτό το netcat, αλλά μπορείτε ακόμα να εκτελέσετε μια εντολή αφού δημιουργηθεί η σύνδεση ανακατευθύνοντας τους περιγραφείς αρχείων. Να είστε προσεκτικοί εδώ, επειδή η δημιουργία μιας θύρας και η επιτρεπόμενη σύνδεση οποιουδήποτε για την εκτέλεση αυθαίρετων εντολών στην τοποθεσία σας είναι ΕΠΙΚΙΝΔΥΝΗ. Εάν πραγματικά χρειάζεται να το κάνετε αυτό, ακολουθεί ένα παράδειγμα:
Στην πλευρά του «διακομιστή»:
$ rm -f /tmp/f; mkfifo /tmp/f
$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f
Στην πλευρά του «πελάτη»:
$ nc host.example.com 1234
$ (προτροπή κελύφους από το host.example.com)
Κάνοντας αυτό, δημιουργείτε ένα fifo στο /tmp/f και κάνετε το nc να ακούει στη θύρα 1234 της διεύθυνσης 127.0.0.1 στην πλευρά του «διακομιστή», όταν ένας «πελάτης» δημιουργεί με επιτυχία μια σύνδεση σε αυτή τη θύρα, το /bin/sh εκτελείται στην πλευρά του «διακομιστή» και η προτροπή κελύφους δίνεται στην πλευρά του «πελάτη».
Όταν η σύνδεση τερματιστεί, το nc τερματίζεται επίσης. Χρησιμοποιήστε το -k εάν θέλετε να συνεχίσει να ακούει, αλλά αν η εντολή τερματιστεί, αυτή η επιλογή δεν θα το επανεκκινήσει ούτε θα διατηρήσει το nc σε λειτουργία. Επίσης, μην ξεχνάτε να αφαιρείτε τον περιγραφέα αρχείου όταν δεν τον χρειάζεστε πλέον:
$ rm -f /tmp/f
ΜΕΤΑΦΟΡΑ ΔΕΔΟΜΕΝΩΝ
Το παράδειγμα στην προηγούμενη ενότητα μπορεί να επεκταθεί για να δημιουργήσει ένα βασικό μοντέλο μεταφοράς δεδομένων. Οποιεσδήποτε
πληροφορίες εισάγονται στο ένα άκρο της σύνδεσης θα εξάγονται στο άλλο άκρο και η είσοδος και η έξοδος μπορούν εύκολα να καταγραφούν
προκειμένου να προσομοιωθεί η μεταφορά αρχείων.
Ξεκινήστε χρησιμοποιώντας το nc για να ακούσετε σε μια συγκεκριμένη θύρα, με την έξοδο να καταγράφεται σε ένα αρχείο:
$ nc -l 1234 > filename.out
Χρησιμοποιώντας μια δεύτερη μηχανή, συνδεθείτε στη διαδικασία ακρόασης nc, τροφοδοτώντας την με το αρχείο που πρόκειται να μεταφερθεί:
$ nc -N host.example.com 1234 < filename.in
Αφού μεταφερθεί το αρχείο, η σύνδεση θα κλείσει αυτόματα.
ΕΠΙΚΟΙΝΩΝΙΑ ΜΕ ΔΙΑΚΟΜΙΣΤΕΣ
Μερικές φορές είναι χρήσιμο να επικοινωνείτε με διακομιστές «με το χέρι» αντί μέσω μιας διεπαφής χρήστη. Μπορεί να βοηθήσει στην αντιμετώπιση προβλημάτων,
όταν μπορεί να είναι απαραίτητο να επαληθευτεί ποια δεδομένα στέλνει ένας διακομιστής ως απάντηση σε εντολές που εκδίδονται από τον πελάτη.
Για παράδειγμα, για να ανακτήσετε την αρχική σελίδα ενός ιστότοπου:
$ printf "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80
Σημειώστε ότι αυτό εμφανίζει επίσης τις κεφαλίδες που αποστέλλονται από τον διακομιστή ιστού. Μπορούν να φιλτραριστούν, χρησιμοποιώντας ένα εργαλείο όπως το sed(1), εάν είναι απαραίτητο.
Μπορούν να δημιουργηθούν πιο περίπλοκα παραδείγματα όταν ο χρήστης γνωρίζει τη μορφή των αιτημάτων που απαιτούνται από τον διακομιστή. Ως άλλο παράδειγμα, ένα email μπορεί να υποβληθεί σε έναν διακομιστή SMTP χρησιμοποιώντας:
$ nc [-C] localhost 25 << EOF
HELO host.example.com
MAIL FROM:<_>
RCPT TO:<_>
DATA
Κείμενο του email.
.
QUIT
EOF
ΣΑΡΩΣΗ ΘΥΡΩΝ
Μπορεί να είναι χρήσιμο να γνωρίζετε ποιες θύρες είναι ανοιχτές και εκτελούν υπηρεσίες σε μια μηχανή-στόχο. Η σημαία -z μπορεί να χρησιμοποιηθεί
για να πει στο nc να αναφέρει τις ανοιχτές θύρες, αντί να ξεκινήσει μια σύνδεση. Συνήθως είναι χρήσιμο να ενεργοποιήσετε την αναλυτική έξοδο στην τυπική έξοδο σφαλμάτων
χρησιμοποιώντας αυτήν την επιλογή σε συνδυασμό με την επιλογή -v.
Για παράδειγμα:
$ nc -zv host.example.com 20-30
Σύνδεση στο host.example.com 22 θύρα [tcp/ssh] πέτυχε!
Σύνδεση στο host.example.com 25 θύρα [tcp/smtp] πέτυχε!
Η περιοχή θυρών καθορίστηκε για να περιοριστεί η αναζήτηση στις θύρες 20 - 30 και σαρώνονται με αύξουσα σειρά (εκτός εάν έχει οριστεί η σημαία -r).
Μπορείτε επίσης να καθορίσετε μια λίστα θυρών για σάρωση, για παράδειγμα:
$ nc -zv host.example.com http 20 22-23
nc: σύνδεση στο host.example.com 80 (tcp) απέτυχε: Απορρίφθηκε η σύνδεση
nc: σύνδεση στο host.example.com 20 (tcp) απέτυχε: Απορρίφθηκε η σύνδεση
Σύνδεση στο host.example.com θύρα [tcp/ssh] πέτυχε!
nc: σύνδεση στο host.example.com 23 (tcp) απέτυχε: Απορρίφθηκε η σύνδεση
Οι θύρες σαρώνουν με την σειρά που δίνεται (εκτός αν ορίζεται η σημαία -r).
Εναλλακτικά, μπορεί να είναι χρήσιμο να γνωρίζουμε ποιο λογισμικό διακομιστή εκτελείται και ποιες εκδόσεις. Αυτές οι πληροφορίες περιέχονται συχνά στις εισαγωγικές μπανιέρες. Για να ανακτήσουμε αυτές, είναι απαραίτητο πρώτα να δημιουργήσουμε μια σύνδεση και, στη συνέχεια, να διακόψουμε τη σύνδεση όταν η μπανιέρα έχει ανακτηθεί. Αυτό μπορεί να επιτευχθεί καθορίζοντας ένα μικρό χρονικό όριο με τη σημαία -w, ή ίσως εκδίδοντας μια εντολή "QUIT" στον διακομιστή:
$ echo "QUIT" | nc host.example.com 20-30
SSH-1.99-OpenSSH_3.6.1p2
Ασυμφωνία πρωτοκόλλου.
220host.example.com IMS SMTP Receiver Version 0.84 Έτοιμος
ΠΑΡΑΔΕΙΓΜΑΤΑ
Ανοίξτε μια σύνδεση TCP στη θύρα 42 του host.example.com, χρησιμοποιώντας τη θύρα 31337 ως θύρα προέλευσης, με χρονικό όριο 5 δευτερολέπτων:
$ nc -p 31337 -w 5 host.example.com 42
Ανοίξτε μια σύνδεση UDP στη θύρα 53 του host.example.com:
$ nc -u host.example.com 53
Ανοίξτε μια σύνδεση TCP στη θύρα 42 του host.example.com χρησιμοποιώντας το 10.1.2.3 ως IP για το τοπικό άκρο της σύνδεσης:
$ nc -s 10.1.2.3 host.example.com 42
Δημιουργήστε και ακούστε σε μια Unix-domain stream socket:
$ nc -lU /var/tmp/dsocket
Συνδεθείτε στη θύρα 42 του host.example.com μέσω ενός διακομιστή μεσολάβησης HTTP στο 10.2.3.4, θύρα 8080. Αυτό το παράδειγμα θα μπορούσε επίσης να χρησιμοποιηθεί από το ssh(1). Δείτε την οδηγία ProxyCommand στο ssh_config(5) για περισσότερες πληροφορίες.
$ nc -x10.2.3.4:8080 -Xconnect host.example.com 42
Το ίδιο παράδειγμα ξανά, αυτή τη φορά ενεργοποιώντας τον έλεγχο ταυτότητας διακομιστή μεσολάβησης με το όνομα χρήστη "ruser" εάν το απαιτεί ο διακομιστής μεσολάβησης:
$ nc -x10.2.3.4:8080 -Xconnect -Pruser host.example.com 42
ΔΕΣ ΕΠΙΣΗΣ
ΣΥΓΓΡΑΦΕΙΣ
Αρχική υλοποίηση από τον *Hobbit* <_>. Επαναγραφή με υποστήριξη IPv6 από τον Eric Jackson <_>. Τροποποιήθηκε για τη θύρα Debian από τον Aron Xu ⟨_⟩.
ΠΡΟΕΙΔΟΠΟΙΗΣΕΙΣ
Οι σαρώσεις θυρών UDP χρησιμοποιώντας τον συνδυασμό των σημαιών -uz θα αναφέρουν πάντα επιτυχία ανεξάρτητα από την κατάσταση της στοχευμένης μηχανής. Ωστόσο, σε συνδυασμό με ένα εργαλείο ανάλυσης κυκλοφορίας είτε στη στοχευμένη μηχανή είτε σε μια ενδιάμεση συσκευή, ο συνδυασμός των σημαιών -uz θα μπορούσε να είναι χρήσιμος για διαγνωστικούς ελέγχους επικοινωνίας. Σημειώστε ότι η ποσότητα της κυκλοφορίας UDP που δημιουργείται μπορεί να περιορίζεται είτε λόγω υλικού είτε λόγω ρυθμίσεων διαμόρφωσης.