Προς το περιεχόμενο

Netcat


sarakinos

Προτεινόμενες αναρτήσεις

Καλησπέρα φίλοι και φίλες insomniacs...

Έχω ένα project στην σχολή που χρησιμοποιώ την netcat για να δημιουργήσω μέσω ενώς script ένα προγραμματάκι με την netcat.

Είναι ένα μικρό chataki και έχει και την δυνατότητα αποστόλής αρχείων από server - > client.

Τέλος πάντων να μην τα πολυλογώ.Στην εκφώνηση λέει ότι πρέπει να γίνεται κρυπτογράφηση του μηνύματος κατα την αποστολή και αποκρυπτογράφηση κατά την λήψη με βάση 2 αντιστοίχων κλειδιών που θα έχω καθορίσει...Βρήκα ότι κρυπτογράφηση γίνεται με την cryptcat αλλά θέλω να ρωτήσω μήπως μπορεί να γίνει κάτι αντίστοιχο με την netcat...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 89
  • Δημ.
  • Τελ. απάντηση

Καλησπέρα,

 

Μπορείς να χρησιμοποιήσεις την openssl(1) ή την gpg2(1).

 

Αν δεν πρόκειται για Shell script αλλά για πρόγραμμα σε κάποια scripting γλώσσα όπως η python, η perl ή η ruby, μπορείς εναλλακτικά να χρησιμοποιήσεις κάποια σχετική βιβλιοθήκη τους.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η διαδικασία crypt/decrypt δεν μπορεί δηλαδή να γίνει με την netcat?πρεπει να χρησιμοποιήσω extra εφαρμογή?το project ειναι ένα shell script.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η διαδικασία crypt/decrypt δεν μπορεί δηλαδή να γίνει με την netcat?πρεπει να χρησιμοποιήσω extra εφαρμογή?το project ειναι ένα shell script.

 

Όχι, το netcat δεν μπορεί να κάνει κρυπρογράφηση. Όπως όμως υπαινήσεται και ο nske παραπάνω, μπορείς εύκολα να φτιάξεις ένα pipeline που θα συνδιάζει το netcat με το openssh. Για παράδειγμα: http://bsdsupport.org/2007/03/q-how-do-i-encrypt-file-transfers-with-dd-and-netcat/

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχω κάνει το script να δουλέυει με netcat γιατ chat και filetransfer με ολους τους ελέγχους αλλά κόλησα στην κρυπτογράφηση..

Μπορείτε να μου δώσετε την εντολή του server για να κάνει listen (με κάποιον προκαθορησμένο κωδικό) και την εντολή του client για σύνδεση στον server (με τον παραπάνω κωδικό).

Επίσης στο project λέει να κάνουμε crypt του μηνύματος κατα την αποστολή και decrypt κατα την λήψη...βαδίζω στα σωστά χνάρια?

να η εκφώνηση :

Το Project αυτό συνίσταται στην κατασκευή ενός προγράμματος σεναρίου κελύφους, που θα

επιτρέπει την κωδικοποιημένη επικοινωνία ανάμεσα σε δύο υπολογιστές χρησιμοποιώντας τη

εντολή netcat. Οι δύο υπολογιστές θα έχουν ήδη φορτωμένα κάποια κλειδιά. Η έναρξη της

επικοινωνίας θα γίνεται με το κλειδί 1 και στη συνέχεια θα μεταβαίνουν στο κλειδί που έχει

επιλεγεί. Τα παραπάνω στοιχεία (διεύθυνση, τελικό κλειδί) θα δίνονται με την υποστήριξη

menu. H εφαρμογή θα πρέπει να κάνει κωδικοποίηση των εξερχόμενων μηνυμάτων και

αποκωδικοποίηση των εισερχόμενων.

 

Να και το script που έκανα μέχρι στιγμής:

 

>
#Project 20 Using Netcat to connect two PCs via key encryption
$choice=0
while [ $choice!=[1-2] ] ;
do
clear
echo "Welcome to NetCat Connector"
echo "**Menu**"
echo "1)Establish 2 virtual adresses"
echo "2)Connection between real adresses"
echo "2)Exit"
echo "Choice:"
read choice
clear
	case $choice in
	1) ifconfig lo:1 10.0.0.1
		ifconfig lo:2 10.0.0.2
		break
		;;
	2)echo "1)Set up server"
		echo "2)Set up client"
		echo "Choice:"
		read choiceN
		if [ $choiceN -eq 1 ]; then
			count=0
while [ "$count" -eq 0 ]
do
echo "Enter a port to open:"
read port
if [ "$port" -ge 1 ] && [ "$port" -le 65535 ]
	then
var=`netstat -an | grep $port`
if [ "$var" ]
	then
	clear
	echo "Port is used.Try another one."
	count=0
else
	clear
	echo "Port is not used.Setting up server..."
	echo "Server is up and running!"
	ip=`ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'`
	echo "Servers ip:$ip"
	echo "Port:$port"
	echo " "
	echo "--Text typed--"
	echo " "
	count=1
	nc -vv -l -p $port
fi
else
	echo "Not valid Port number.'1-65535'."
fi
done
fi
if [ $choiceN -eq 2 ]; then
	echo "Enter servers ip:"
	read sip
	prec=`ping -c4 $sip | grep 'received' | awk -F',' '{ print $2}' | awk '{ print $1}'`
               ptrans=`ping -c4 $sip | grep 'transmitted' | awk -F',' '{ print $0}' | awk '{ print $1}'`
	if [ "$prec" -eq "$ptrans" ]
	then
	echo "Server found!"
	else 
	echo "Server not responded.Terminating..."
	exit
	fi
	echo "Enter servers port to hear:"
	read port1
	check=0
	while [ $check -eq 0 ]
	do
if [ "$port1" -ge 1 ] && [ "$port1" -le 65535 ]
then
	check=1
	nc -vv $sip $port1
	
else
	echo "Not valid Port number.'1-65535'."
	echo "Enter servers port to hear:"
	read port1
fi
done
fi
break
;;
	3) exit
;; 
esac
done

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μπορείτε να μου δώσετε την εντολή του server για να κάνει listen (με κάποιον προκαθορησμένο κωδικό) και την εντολή του client για σύνδεση στον server (με τον παραπάνω κωδικό).

Δεν κάνει listen με κάποιο κωδικό, οι διαδικασίες μεταφοράς δεδομένων και κρυπτογράφησης δεδομένων πραγματοποιούνται με εντελώς ανεξάρτητο τρόπο, από ανεξάρτητες εφαρμογές. Δηλαδή γίνεται το εξής:

 

Στον μεν server ορίζεις τα δεδομένα που θα παραλαμβάνονται από τη netcat (τα οποία υποθέτεις ότι θα είναι κρυπτογραφημένα) να στέλνονται στη συνέχεια στην openssl (ή σε κάποιο άλλο τέτοιο πρόγραμμα) για αποκρυπτογράφηση. Αυτό γίνεται με pipe, όπως αναφέρει και στο link που έδωσε ο geopoul, π.χ.:

>nc -vv -l -p $port | openssl aes-256-cbc -salt -d

 

Στον δε client, ορίζεις τα δεδομένα που εισάγονται να στέλνονται πρώτα στην openssl, ώστε να κρυπτογραφούνται, και μετά να γίνονται pipe στην netcat για αποστολή. Π.χ.:

>openssl aes-256-cbc -salt | nc -vv $sip $port1

 

Από κει και πέρα είναι μερικά επιπλέον προβληματάκια που χρειάζονται λύση, όπως ότι:

 

  • Η κρυπτογράφηση να γίνεται για κάθε μήνυμα αυτόματα (γιατί έτσι όπως είναι θα χρειάζεται να τερματίζει και να ξανατρέχει ο client σε κάθε μήνυμα). Αυτό είναι κάτι που θα πρέπει να το διαχειριστείς με το shell, μεσολαβώντας κάποια loop που θα εκτελεί την εντολή για κάθε μήνυμα που εισάγει ο χρήστης.
     
     
  • Αν ο κωδικός δεν είναι επιθημητό να εισάγεται κατά την εκτέλεση από τον χρήστη, να του τον προκαθορίσεις με κάποιον από τους τρόπους που αναφέρει η man page της openssl ("PASS PHRASE ARGUMENTS"). Φυσικά αντί για κωδικό (symmetric cryptography scheme)μπορείς να χρησιμοποιήσεις και κάποιο ζεύγος κλειδιών που θα βρίσκονται σε κάποια αρχεία (asymmetric ή public key scheme) -αυτό νομίζω ότι θέλει η άσκηση. Για το concept αυτού του μοντέλου κρυπτογράφησης δες εδώ και για το πώς μπορείς με την openssl να παράξεις και να χρησιμοποιήσεις κλειδιά υπάρχουν πολλά εισαγωγικά και παραδείγματα (ψάξε π.χ. για openssl+examples ή +tutorial/howto).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καλησπέρα...

Τελικά το θέμα μου φαίνεται κάπως δισνόητο ακόμα :(

.Το θέμα μου ποιο είναι λοιπόν..αυτό το loop που είπες να κάνω,πώς θα γίνει , αφού από το ξεκίνημα της nc και μετά τα δεν μπορώ να παρέμβω στην ροή,απλά ο χρήστης γράφει στον client και τα μηνύματα εμφανίνζονται στον server και αντίστοιχα...θα πρέπει με loop να κλείνω και να ανοιγω την σύνδεση απο την αρχή?ακόμα,τα κλειδιά που θα έχω φορτωμένα σε αρχεία ?τι αρχεία θα είναι αυτα?τι κλειδιά θα έχουν ?και πως θα γίνεται η μετάβαση από το 1ο κατα την κρυπτογράφηση στο 2ο κατά την αποκρυπτογράφηση?

I'm confuzed! :(

 

PS . Ο server δεν μπορεί να στέλνει στον client?Ώστε να γίνεται chat?

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Το θέμα μου ποιο είναι λοιπόν..αυτό το loop που είπες να κάνω,πώς θα γίνει , αφού από το ξεκίνημα της nc και μετά τα δεν μπορώ να παρέμβω στην ροή,απλά ο χρήστης γράφει στον client και τα μηνύματα εμφανίνζονται στον server και αντίστοιχα...θα πρέπει με loop να κλείνω και να ανοιγω την σύνδεση απο την αρχή?

Δε ξέρω αν πρέπει απαραίτητα, καθώς υπάρχουν πολλοί τρόποι για να κάνεις το κάθε τι (πάνω από μία υλοποιήσεις του netcat, πάνω από ένα πρόγραμμα που μπορεί να κάνει κρυπτογράφηση/αποκρυπτογράφηση, πάνω από ένα shell, κλπ). Γενικά, χάρη στη φιλοσοφία του unix, σπάνια θα βρεθείς στη θέση να πρέπει να ακολουθήσεις έναν μοναδικό τρόπο για να πετύχεις κάτι. Πάντως σίγουρα γίνεται και έτσι, και είναι απλό.

 

Hints:

1) echo

2) while true

3) nc -c

 

τι αρχεία θα είναι αυτα?τι κλειδιά θα έχουν

Καταρχήν διάβασε για τη διαφορά Symmetic και Asymmetric / Public-Key cryptography, για να αποφασίσεις τι θέλεις να χρησιμοποιήσεις. Για symmetric μπορείς να χρησιμοποιήσεις οποιοδήποτε σύνολο δεδομένων ως key, ας πούμε ένα text string ή ένα αρχείο με μια φωτογραφία, οτιδήποτε. Για asymmetric θα πρέπει να φτιάξεις ένα ζεύγος κλειδιών, π.χ. δίνοντας κάτι σαν:

 

>$ openssl genrsa -out private.key 2048
$ openssl rsa -pubout -in private.key -out public.key

 

Από κει και πέρα μπορείς π.χ. να κρυπτογραφείς δεδομένα με το public key και να τα αποκρυπτογραφείς με το private, ένα απλό demonstration:

>echo 124 | openssl rsautl -pubin -inkey public.key -encrypt | openssl rsautl -inkey private.key -decrypt

 

Στην εργασία σου, αφού όπως κατάλαβα μιλάμε για μονόδρομη επικοινωνία (δηλαδή ο client απλά στέλνει και ο server απλά λαμβάνει), ο client θα κάνει αποκλειστικά encryption και ο server θα κάνει αποκλειστικά decryption.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

αν μηλουσαμε για αμφήδρομη επικοινωνία πως θα γινόταν?αυτο έχω στο μυαλό μου εγώ...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Κάθε άκρο θα έτρεχε έναν netcat listener (server) σε διαφορετική port και έναν netcat connector (client) που θα συνδέεται στην port του άλλου.

 

Το μόνο ζήτημα είναι να βρεις έναν τρόπο το terminal κάθε άκρου να τυπώνει το output του listener αλλά ταυτόχρονα να δέχεται και να στέλνει το input με τον connector. Ο πιο προφανής τρόπος θα ήταν να στείλεις τους listeners ως background jobs από το shell (google: shell+job+control+background). Έτσι το μεν foreground θα είναι ελεύθερο για να διαβάσει το input που θα εισάγει ο χρήστης στο terminal, αλλά ταυτόχρονα το stdout του background process θα μπορεί να τυπώνεται στο ίδιο terminal.

 

Κάτι άλλο: είναι δύσχρηστο να πρέπει να ορίζει ο χρήστης ports στον server και τον client κάθε φορά που τρέχει το script, πιθανότατα δεν τον ενδιαφέρει αυτός ο έλεγχος. Αν δε το απαιτεί η άσκηση πιο λογικό φαίνεται να ορίσεις hard-coded τις ports στο script.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Προυπόθεση καλής βαθμολόγησης είναι ο έλεγχος για κάθε περίπτωση ωστε να μην υπάρχει πρόβλημα...γιαυτό και το κάνω...δεν με νοιάζει τόσο πολύ η χρηστικότητα σε αυτήν την περίπτωση..

 

---------- Το μήνυμα προστέθηκε στις 12:22 ----------

 

Φίλε μου δεν καταφέρνω να κάνω αυτήν την δουλεια στέλνοντας τις διεργασίες στο background.

Κάνω κάτι τέτοιο..(περίπου)

>
Server:
nc -vv -l -p $port | openssl aes-256-cbc -salt -d
ctrl+z
bg 1
openssl aes-256-cbc -salt | nc -vv $sip $port1

Client:
openssl aes-256-cbc -salt | nc -vv $sip $port1
ctrl+z
bg 1
nc -vv -l -p $port | openssl aes-256-cbc -salt -d

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Με ctrl+z η διεργασία παγώνει. Ή θα τρέξεις την εντολή με & στο τέλος για να την στείλει το shell στο background ή θα την εκτελέσεις μέσω της nohup. Ρίξε μιά ματιά στο man nohup για λεπτομέρειες.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.


  • Δημιουργία νέου...