Επιστροφή στο blog

Εργαλείο Netcat στο Linux: Δοκιμή συνδέσεων TCP/UDP σε ένα VPS με το Netcat

Εργαλείο Netcat στο Linux: Δοκιμή συνδέσεων TCP/UDP σε ένα VPS με το Netcat

Εισαγωγή

Ένα από τα μεγαλύτερα πλεονεκτήματα της χρήσης του Linux είναι η πληθώρα χρήσιμων βοηθητικών προγραμμάτων που παρέχει. Οι ενσωματωμένες λειτουργίες είναι συνήθως επαρκείς για τους περισσότερους προγραμματιστές ώστε να κάνουν τη δουλειά τους. Αυτό σημαίνει ότι τις περισσότερες φορές, δεν θα χρειαστεί να κατεβάσετε εξωτερικά προγράμματα και λογισμικό. Τα ενσωματωμένα εργαλεία θα σας παρέχουν αρκετή χρησιμότητα. Μεταξύ αυτών των χρήσιμων λειτουργιών είναι το βοηθητικό πρόγραμμα netcat.

Όταν πρόκειται για τον κόσμο των εργαλείων δικτύωσης, το netcat είναι κάτι σαν ένα υπερβολικά ισχυρό όπλο. Είναι μια απίστευτα ευέλικτη εντολή που μπορείτε να χρησιμοποιήσετε για πολλαπλούς σκοπούς. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε αυτό το μοναδικό εργαλείο για να παρακολουθείτε, να δοκιμάζετε, καθώς και να μεταφέρετε κάθε είδους αρχεία και δεδομένα μέσω των συνδέσεων του συστήματός σας. Σε αυτόν τον οδηγό, θα εξερευνήσουμε πώς να εκτελέσετε όλες αυτές τις ενέργειες σε ένα VPS χρησιμοποιώντας το netcat.

Εύρεση του Netcat

Το Netcat είναι συνήθως διαθέσιμο σε όλες τις σύγχρονες διανομές Linux. Αυτό σημαίνει ότι πιθανότατα το έχετε ήδη και δεν χρειάζεται να προσπαθήσετε ιδιαίτερα για να το εγκαταστήσετε. Στο σεμινάριό μας, θα χρησιμοποιήσουμε το Ubuntu 12.04 VPS. Μπορείτε να εγκαταστήσετε τον δικό σας διακομιστή Ubuntu ακολουθώντας το σεμινάριό μας.  Το Ubuntu συνήθως συνοδεύεται από την παραλλαγή BSD του βοηθητικού προγράμματος netcat. Έχετε υπόψη σας ότι εάν έχετε άλλη έκδοση, μπορεί να λειτουργεί λίγο διαφορετικά.

Ανασκόπηση της Βασικής Σύνταξης

Ξεκινάμε μαθαίνοντας για τη γενική σύνταξη που λειτουργεί στο βοηθητικό πρόγραμμα netcat. Μπορείτε να χειριστείτε το netcat ξεκινώντας μια σύνδεση TCP. Η σύνδεση πρέπει να ξεκινήσει προς έναν απομακρυσμένο κεντρικό υπολογιστή. Εδώ είναι η βασική σύνταξη για το netcat:

Αυτή η εντολή θα προσπαθήσει να ξεκινήσει μια σύνδεση TCP σε έναν απομακρυσμένο κεντρικό υπολογιστή. Το σε ποιον κεντρικό υπολογιστή θα συνδεθεί εξαρτάται από τον αριθμό θύρας που καθορίζετε στην εντολή. Η σύνδεση θα είναι μη κρυπτογραφημένη. Όπως μπορείτε να δείτε, αυτή η εντολή λειτουργεί παρόμοια με τον τρόπο που λειτουργεί η εντολή telnet.

Από την άλλη πλευρά, μπορείτε επίσης να ξεκινήσετε μια συλλογή UDP. Για να στείλετε ένα πακέτο UDP αντί για TCP, πρέπει να χρησιμοποιήσετε την επιλογή -u. Δείτε πώς θα έμοιαζε:

Εάν το επιθυμείτε, μπορείτε επίσης να καθορίσετε ένα εύρος θυρών. Για να το κάνετε αυτό, πρέπει να βάλετε μια παύλα μεταξύ της πρώτης και της τελευταίας θύρας. Εδώ είναι ένα παράδειγμα:

Μπορείτε επίσης να προσθέσετε περισσότερες σημαίες σε αυτό. Κάτι άλλο που πρέπει να σημειωθεί είναι ότι μπορείτε να χρησιμοποιήσετε τα netcat και nc εναλλακτικά. Θα σας οδηγήσουν στην ίδια εντολή, που σημαίνει ότι είναι ψευδώνυμα το ένα του άλλου.

Χρήση του Netcat για Σάρωση Θυρών

Για αρχή, ας εξερευνήσουμε μία από τις πιο κοινές χρήσεις του netcat. Θα μάθουμε πώς να το χρησιμοποιούμε ως σαρωτή θυρών. Στις περισσότερες περιπτώσεις, είναι προτιμότερο να χρησιμοποιήσετε ένα εργαλείο όπως το nmap. Ωστόσο, εάν χρειάζεται απλώς να εκτελέσετε απλές σαρώσεις θυρών, τότε το netcat είναι χρήσιμο. Μπορεί να σας βοηθήσει να εντοπίσετε ανοιχτές θύρες με ευκολία.

Για να χρησιμοποιήσετε το netcat ως σαρωτή θυρών, πρέπει να αναφέρετε το εύρος των θυρών. Θα το κάνετε αυτό χρησιμοποιώντας την επιλογή -z. Έτσι, το σύστημα θα σαρώσει το εύρος των θυρών αντί να επιχειρήσει μια σύνδεση. Ας υποθέσουμε ότι θέλουμε να σαρώσουμε από τη θύρα 1 έως τη θύρα 1000:

Εκτός από την εντολή -z, έχουμε χρησιμοποιήσει επίσης την επιλογή -v. Η τελευταία μας επιτρέπει να δώσουμε περισσότερες πληροφορίες στην εντολή. Μας επιτρέπει να είμαστε πιο λεπτομερείς («verbose»).

Θα λάβετε ένα αποτέλεσμα σαν αυτό ως απάντηση:

port scanning netcat utility

Το αποτέλεσμα δείχνει πολλές πληροφορίες για κάθε μεμονωμένη θύρα. Γνωρίζετε την κατάσταση σύνδεσης κάθε θύρας. Από την άλλη πλευρά, μπορείτε να χρησιμοποιήσετε τη διεύθυνση IP αντί για το όνομα τομέα εάν τη γνωρίζετε. Αυτό κάνει τη διαδικασία πολύ πιο γρήγορη. Εδώ είναι ένα παράδειγμα:

Χρησιμοποιήσαμε τη σημαία -n για να υποδείξουμε ότι το σύστημα χρειάζεται να χρησιμοποιήσει DNS για την ανάλυση της διεύθυνσης IP.

Συνήθως, τα μηνύματα επιστροφής στέλνονται στο standard error. Για να φιλτράρετε τα αποτελέσματα πιο γρήγορα, μπορείτε να τα ανακατευθύνετε στο standard out. Θα χρησιμοποιήσουμε τη σύνταξη bash 2>&1 για να το κάνουμε αυτό. Στη συνέχεια, θα φιλτράρουμε τα αποτελέσματα χρησιμοποιώντας το grep. Ας το εφαρμόσουμε στο παράδειγμά μας:

Το αποτέλεσμα θα μοιάζει με αυτό:

port scan succeeded

Το αποτέλεσμα δείχνει ότι μόνο η θύρα 22 είναι ανοιχτή για σύνδεση στο συγκεκριμένο εύρος. Η θύρα 22 τυχαίνει να είναι η παραδοσιακή θύρα SSH.

Επικοινωνία μέσω Netcat: Πώς λειτουργεί;

Στη συνέχεια, θα δούμε πώς μπορείτε να χρησιμοποιήσετε το netcat για να στείλετε πακέτα TCP και UDP. Όχι μόνο αυτό, αλλά μπορεί επίσης να λάβει πακέτα σε διάφορες θύρες. Ως αποτέλεσμα αυτής της δυνατότητας, μπορείτε να χρησιμοποιήσετε δύο στιγμιότυπα netcat για να δημιουργήσετε μια σχέση πελάτη-διακομιστή. Στην αρχή, θα καθορίσετε τον πελάτη και τον διακομιστή. Μετά την αρχική ρύθμιση, και οι δύο πελάτες μπορούν να στέλνουν και να λαμβάνουν πακέτα προς οποιαδήποτε κατεύθυνση.

Φυσικά, θα πρέπει να ρυθμίσετε το netcat σε ένα σύστημα ώστε να ακούει για συνδέσεις σε μια θύρα. Για να το κάνετε αυτό, πρέπει να χρησιμοποιήσετε την παράμετρο -l. Με αυτό, μπορείτε να επιλέξετε τη θύρα της επιλογής σας ως εξής:

Τώρα το TCP σε αυτό το μηχάνημα θα ακούει για συνδέσεις στη θύρα 4444. Ένα σημείο που πρέπει να σημειωθεί είναι ότι εάν είστε μη-root ή απλός χρήστης, δεν θα μπορείτε να έχετε πρόσβαση σε θύρες κάτω από το 1000.

Στη συνέχεια, πρέπει να ρυθμίσετε ένα δεύτερο μηχάνημα για να δημιουργήσετε μια σύνδεση. Θα χρησιμοποιήσετε τον ίδιο αριθμό θύρας και θα υποδείξετε ένα συγκεκριμένο όνομα τομέα ως εξής:

Η εκτέλεση αυτής της εντολής δεν θα σας δώσει κανένα αποτέλεσμα. Ωστόσο, θα δημιουργήσει τη σύνδεση. Αυτό σημαίνει ότι μπορείτε να ξεκινήσετε να στέλνετε μηνύματα από οποιονδήποτε από τους διακομιστές στον άλλο. Για να το κάνετε αυτό, το μόνο που έχετε να κάνετε είναι να πληκτρολογήσετε το μήνυμα και στη συνέχεια να πατήσετε ENTER. Το μήνυμα θα εμφανιστεί και στις δύο οθόνες.

Μόλις τελειώσετε, μπορείτε να κλείσετε τη σύνδεση TCP πατώντας CTRL+D.

Μπορείτε να στείλετε αρχεία χρησιμοποιώντας το Netcat;

Στη συνέχεια, θα σας δείξουμε πώς μπορείτε να στείλετε αρχεία μέσω του netcat. Με μια σύνδεση TCP, μπορείτε να στείλετε μηνύματα καθώς και άλλους τύπους δεδομένων. Για να ξεκινήσετε, πρέπει να επιλέξετε ένα μηχάνημα για να ακούει για συνδέσεις. Ωστόσο, αντί να πληκτρολογήσουμε τις πληροφορίες στην εντολή, θα τις τοποθετήσουμε σε ένα αρχείο ως εξής:

Στο άλλο μηχάνημα, θα πρέπει να δημιουργήσετε ένα νέο αρχείο κειμένου. Δείτε την εντολή που πρέπει να χρησιμοποιήσετε:

Για να μεταδώσετε το αρχείο, θα το χρησιμοποιήσετε ως είσοδο για τη σύνδεση στον υπολογιστή που ακούει:

Ο άλλος υπολογιστής θα εμφανίσει ένα νέο αρχείο με όνομα ‘received_file’. Θα περιέχει όλες τις πληροφορίες που πληκτρολογήσαμε:

file transmissionΜπορείτε να χρησιμοποιήσετε αυτό το βοηθητικό πρόγραμμα και να το μετατρέψετε σε πρόγραμμα μεταφοράς αρχείων. Ας υποθέσουμε ότι θέλετε να μεταφέρετε τα περιεχόμενα ενός καταλόγου. Θα το κάνουμε δημιουργώντας ένα ανώνυμο αρχείο tar (tarball) το οποίο θα μεταφέρουμε στο σύστημα και θα το αποσυμπιέσουμε στον απομακρυσμένο κατάλογο. Στο άλλο μηχάνημα, πρέπει να προετοιμαστούμε για τη λήψη του αρχείου. Γνωρίζουμε ότι θα χρειαστεί να το αποσυμπιέσουμε και να το εξαγάγουμε. Για να το κάνετε αυτό, εκδώστε αυτήν την εντολή:

Η παύλα υποδεικνύει ότι το tar θα λειτουργήσει στην τυπική είσοδο. Αυτή προέρχεται από το netcat στον αρχικό διακομιστή όταν δημιουργήσαμε την αρχική σύνδεση.

Τέλος, μπορούμε να τοποθετήσουμε τα περιεχόμενα ολόκληρου του καταλόγου σε ένα αρχείο tar και να το στείλουμε μέσω του netcat ως εξής:

Η παύλα στην εντολή tar δείχνει ότι λέμε στο σύστημα να αρχειοθετήσει και να συμπιέσει τα περιεχόμενα του καταλόγου. Επίσης, του δίνει εντολή να γράψει το αποτέλεσμα στην τυπική έξοδο. Το αρχείο θα περάσει μέσω της σύνδεσης TCP στο άλλο άκρο. Ο διακομιστής λήψης θα το αποσυμπιέσει και θα το αποθηκεύσει στον τρέχοντα απομακρυσμένο κατάλογο.

Με τον ίδιο ακριβώς τρόπο, μπορείτε να μεταφέρετε και άλλους τύπους δεδομένων μέσω του netcat. Πολλοί άνθρωποι χρησιμοποιούν την εντολή dd για να δημιουργήσουν είδωλα δίσκων και να τα μεταφέρουν. Για έναν άλλο τρόπο μεταφοράς δεδομένων και αρχείων, ρίξτε μια ματιά στον δικό μας οδηγό που δείχνει πώς να διασφαλίσετε την ασφάλεια κατά τη μεταφορά αρχείων με  SFTP.

Χρήση του Netcat ως Web Server

Μια άλλη χρήσιμη λειτουργία του netcat είναι ότι μπορείτε να το χρησιμοποιήσετε για να δοκιμάσετε τις σελίδες σας. Ας υποθέσουμε ότι χρησιμοποιούμε έναν διακομιστή για να δημιουργήσουμε ένα αρχείο HTML όπως αυτό:

Αυτός είναι ο κώδικας HTML που περιέχει το αρχείο:

Εισαγάγετε αυτό στο αρχείο, στη συνέχεια αποθηκεύστε το και κλείστε το. Συνήθως, η θύρα 80 είναι η προεπιλεγμένη θύρα ιστού. Ως απλός χρήστης, μη root, θα επιλέξουμε τη θύρα 8888. Υποθέτοντας ότι θέλετε να σερβίρετε και να ελέγξετε τη σελίδα μία φορά, θα πρέπει να χρησιμοποιήσετε αυτήν την εντολή:

Για να οπτικοποιήσετε το περιεχόμενο του αρχείου, μεταβείτε στο πρόγραμμα περιήγησής σας. Επισκεφθείτε το εξής:

Θα μπορείτε να δείτε τη σελίδα που κωδικοποιήσατε με το αρχείο HTML:

output html page netcat utility

Μόλις λάβετε τη σελίδα, η σύνδεση netcat θα κλείσει. Αυτό σημαίνει ότι η ανανέωση της σελίδας θα σας εμφανίσει σφάλμα αντί για το περιεχόμενο. Αυτό συμβαίνει επειδή το ρυθμίσαμε να σερβίρει τη σελίδα μόνο μία φορά. Εάν θέλετε να συνεχίσετε να λαμβάνετε συνδέσεις για να βλέπετε τη σελίδα επ' αόριστον, θα χρησιμοποιήσετε έναν διαφορετικό κώδικα:

Εδώ, κλείσαμε την τελευταία εντολή σε έναν άπειρο βρόχο. Εάν θέλετε να σταματήσετε τον βρόχο, το μόνο που έχετε να κάνετε είναι να πληκτρολογήσετε CTRL-C. Τώρα μπορείτε να συνεχίσετε να βλέπετε τη σελίδα σας και την εμφάνισή της ακόμα και μετά το κλείσιμο της πρώτης σύνδεσης. Ωστόσο, αυτή είναι η μέγιστη λειτουργικότητα που μπορείτε να εξαγάγετε από τη χρήση του εργαλείου netcat ως διακομιστή ιστού. Μην προσπαθήσετε να το χρησιμοποιήσετε για να σερβίρετε πραγματικούς ιστότοπους, καθώς δεν παρέχει καμία ασφάλεια. Αντ' αυτού, μπορείτε να ρίξετε μια ματιά στους οδηγούς μας σχετικά με πώς να εγκαταστήσετε λογισμικό διακομιστή ιστού όπως το Nginx ή Apache.

Συμπέρασμα

Σε αυτόν τον οδηγό, καλύψαμε το εργαλείο netcat και εξερευνήσαμε την ευελιξία του ως εργαλείο στο Ubuntu. Όπως καλύψαμε στις παραπάνω ενότητες, μπορείτε να το χρησιμοποιήσετε για σκοπούς επικοινωνίας, μεταφοράς δεδομένων και σερβιρίσματος σελίδων. Λειτουργεί τέλεια για γρήγορες αλληλεπιδράσεις μεταξύ διακομιστών μέσω συνδέσεων TCP/UDP. Είναι μια πολύ χρήμη δυνατότητα για πολλές βασικές λειτουργίες και διαγνωστικά.

Καλή συνέχεια!

author

Akshay Nagpal

Συγγραφέας · CloudSigma

Ο Preslav Dobrev είναι Δημιουργικός Σχεδιαστής στην CloudSigma, με εστίαση στη συνεπή επιχειρηματική ταυτότητα μέσω παραδοσιακών και καινοτόμων καναλιών μάρκετινγκ. Διαθέτει την ικανότητα να συνδυάζει το καλλιτεχνικό όραμα με το στρατηγικό μάρκετινγκ για τη δημιουργία εντυπωσιακών αφηγήσεων επωνυμίας.

Σχόλια

Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.