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

Netcat


sarakinos

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

  • Απαντ. 89
  • Δημ.
  • Τελ. απάντηση
Στο εξήγησα, ξαναδιάβασε λίγο το post μου.

Στο /dev/null πάει οποιοδήποτε μήνυμα του netcat προοριζόταν από τον developer να είναι error ή warning, οχι αυτό το μήνυμα που δέχτηκε από το socket που άνοιξε για να ακούει.

 

2> /dev/null

Αρα εδώ φίλε μου πανε τα errors ετσι?

στο stdin παει το μήνυμα που έρχεται απο τον client και τυπώνεται μέσω του stdout...Καλά μέχρι εδώ?

Το πρόβλημα που είπα παραπάνω όμως γιατί μου το κάνει...που τα μηνύματα του server στον client δεν εμφανίζονται απο μόνα του αλλα θέλει να γράψω ένα μήνυμα απο client-server ή να πατήσω ένα enter απλά στον client...

Δηλαδή έχω το παρακάτω:

>
server:
hi


client:
(τίποτα)
----------------------------------------
server:
hi
year

client:
year(γράφω αυτό)
hi(εμφανίζεται το προηγούμενο μήνυμα 'hi')

 

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

 

γειά σου NullScan firewalker nske

τα είπες τέλεια

ακόμα κι εγώ κατάλαβα !

 

 

προτείνω τη δημιουργία "σχολείου" στο insomnia :mrgreen:

.

 

Τώρα μαθαίνω :(

Μην μ'αποπέρνετε ρεεεεε!

:)

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

Ξέχνα το -vv. Αν δεν υπήρχε ο κώδικας θα ήταν ως εξής:

 

Για τον client:

 

>
while [ true ]; do
      read message2send
      echo $message2send | openssl rsautl -pubin -inkey public.key -encrypt | nc -c localhost $port1 
done

 

Που κάνει το εξής: Συνεχώς μέσω της while θα διαβάζει μέσω της read ότι γράψει ο χρήστης και το αποθηκεύει στην μεταβλητή message2send. Η read θεωρεί σαν τέλος εισόδου από τον χρήστη το enter. Με το πάτημα του enter η μεταβλητή αυτή γίνεται echo περνά από κρυπτογράφηση και μεταδίδεται προς τον server από την netcat.

 

 

Για τον server:

 

>
while [ true ]; do 
      message=`nc -l -p $port | openssl rsautl -inkey private.key -decrypt`
      echo $message
done

 

Συνεχώς ο Server διαβάζει με την netcat αυτά που του στέλνουν και τα αποθηκεύει στην μεταβλητή message και στην συνέχεια με την echo τυπώνεται στην οθόνη.

 

Δεν χρειάζεται να κάνουμε κάποια ανακατεύθυνση της stdout. Εξ ορισμού θα τυπωθεί ότι είναι από την stdout στην οθόνη.

 

Εγώ με του που πατάω enter στον client το μήνυμα εμφανίζεται στον server. Από τον server στον client θα το κοιτάξω.

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

Από την στιγμή που θα γίνει η σύνδεση μέσω της netcat (χωρίς encryption κτλ) η επικοινωνία είναι αμφίδρομη. Τώρα τα πράγμα μπερδεύονται λίγο λόγο του encryption και του -c που κλείνει την σύνδεση στο τέλος κάθε μηνύματος. Μόλις όμως ξανα στείλεις κάτι, η σύνδεση ανοίγει και το μήνυμα του server φτάνει.

 

Δεν μπορώ να σκεφτώ κάτι άλλο.

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

Μήπως αν μπορούσαμε να κάνουμε κάπως τον client να στέλνει ένα "space" πχ κάθε δευτερόλεπτο,ή ένα εντερ...

Να φαίνεται σαν να πατάω εγώ το έντερ δηλαδη απο τον client ώστε να ανοίγω πάλι την σύνδεση..

 

Ακυρο...

ετσι δεν θα μπορούσαμε να πληκτολογήσουμε τπτ...

 

PS...

Κατι άλλο,τα μηνύματα από server σε client περνάνε απο openssl ? ή εμφανίζονται λόγο της απλής αμφίδρομης επικοινωνίας του netcat?

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

#1

Υπενθυμίζω ότι πλέον οι όροι "client" και "server" δεν αναφέρονται στα μηχανήματα' date=' αλλά στον ρόλο που επιτελεί η netcat όπως εκτελείται σε κάθε περίπτωση.

Για να υπάρχει αμφίδρομη επικοινωνία, κάθε μηχάνημα θα είναι και client και server, δηλαδή θα τρέχει τη netcat και με τους δύο τρόπους.[/quote']

 

#2

Σε κάθε μηχάνημα' date=' το script θα τρέχει μία loop για τη netcat - server στο background job και μία loop για τη netcat - client στο Foreground.

Το background job γράφει κανονικά στο terminal, αλλά δεν δεσμεύει την είσοδο, αυτό το κάνει το foreground process.[/quote']

 

#3

Θυμίζω ότι "Client" και "Server" δεν είναι ρόλοι των μηχανημάτων, κάθε μηχάνημα είναι και Server και Client! Δηλαδή κάθε μηχάνημα θα τρέχει διαρκώς στο background ένα netcat που κάνει listen και στο foreground ένα άλλο που θα κάνει connect στο απέναντι.

 

απόπειρα #4:

 

Δεν υπάρχει ένας server ένας client, αλλά δύο servers και δύο clients, από ένας σε κάθε άκρο.

 

Ο server κάθε άκρου δεν κάνει κάτι με την είσοδο του χρήστη, απλά κάθεται σαν ένα background job και παραλαμβάνει ό,τι του στείλει ο απέναντι client.

 

Άκρο 1:

>[color="Red"](server)[/color] while true; nc -l -p 6666 2>/dev/null | openssl μπλαμπλα; done &
[color="Red"](client)[/color] while true; read message; echo $message  | openssl μπλαμπλα -encrypt | nc -c 2.2.2.2 6667; done

 

Άκρο 2:

>[color="Red"](server)[/color] while true; nc -l -p 6667 2>/dev/null | openssl μπλαμπλα; done &
[color="Red"](client)[/color] while true; read message; echo $message  | openssl μπλαμπλα -encrypt | nc -c 1.1.1.1 6666; done

 

Φυσικά αυτός είναι απλά ένας πιθανός τρόπος, δεν είναι απαραίτητα ούτε ο μοναδικός ούτε ο καλύτερος ;-)

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

Firewalker τι έκανες τελικά με το πρόβλημα που είχαμε?

nske κατάλαβα αυτό που είπες , ουκ ολίγες φορες :)....

Τους όρους server-client τους αναφέρω απο συνήθεια..

Απλώς ο τρόπος που πάω να το κάνω μου φαίνεται ποιο "βατός" για μένα προς το παρών....πολλά είπα όμως,lets start testing,αυριο έχω παράδοση...

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

Θα το δώ μόνος μου φίλε μου..σας ευχαριστώ όλους και πάλι για την βοήθεια... (αφήνω ένα παραθυράκι για τον κώδικα όμως :) , αν.... :) )

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

At last...δουλεύει οκ,έβαλα και τους ελέγχους που ήθελα και είμαι οκ...να σας πω τώρα,που θα κάνω echo το όνομα του αποστολέα και του παραλήπτη μέσα στο script για να μην γίνεται αυτός ο χαμός μηνυμάτων?Δοκίμασα μόνος μου αλλα έβγαζε όπου ν'ανε...

To script

>
#Project 20 Using Netcat to connect two PCs via key encryption
$choice=0
while [ $choice!=[1-2] ] ;  #!arxiko loop
do
clear
echo "Welcome to NetCat Connector"
echo "**Menu**"
echo "1)Connection between two PCs"
echo "2)Exit"
echo "Choice:"
read choice
clear
	case $choice in
		1)echo "Set up PC for connection"
			count=0
while [ "$count" -eq 0 ]
do
echo "Enter servers port:"
read portS
echo "Enter clients port:"
read portC
echo "Enter clients ip:"
read ipC
prec=`ping -c4 $ipC | grep 'received' | awk -F',' '{ print $2}' | awk '{ print $1}'`
               ptrans=`ping -c4 $ipC | grep 'transmitted' | awk -F',' '{ print $0}' | awk '{ print $1}'`
	if [ "$prec" -eq "$ptrans" ]
then
echo "Client PC found!"
else 
echo "Client PC not found,terminating..."
exit 1
fi
if [ "$portS" -ge 1 ] && [ "$portS" -le 65535 ] 
	then
var=`netstat -an | grep $portS`
if [ "$var" ]
	then
	clear
	echo "Port is used.Try another one."
	count=0
else
	clear
	echo "Port is not used.Setting up PC..."
	echo "PC 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 "Clients ip:$ipC"
	echo "Servers port:$portS"
	echo "Clients port:$portC"
	echo " "
	echo "--Text typed--"
	echo " "
	count=1
fi
else
	echo "Not valid Port number.'1-65535'."
fi
done
	while [ true ];do
nc -l -p $portS 2> /dev/null | openssl rsautl -inkey private.key -decrypt; done & 


while [ true ];do

read message; echo $message  | openssl rsautl -pubin -inkey public.key -encrypt | nc -q 3 $ipC $portC 2> /dev/null ; done


break
;;
	2) exit
;; 
esac
done

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

Εγώ κάνω το παρακάτω.

 

>
read nickname1

while [ true ]; do read message1; echo "[b]$nickname1 says:[/b] $message1" | openssl rsautl -pubin -inkey public.key -encrypt | nc -c -vv localhost $(($port+1)) 2> /dev/null; done

 

Μετά περνάω και χρωματάκια.

 

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

 

Δηλώνεις τα χρώματα στην αρχή

 

http://tldp.org/LDP/abs/html/colorizing.html

>
Black='\e[0;30m'
Blue='\e[0;34m'
Green='\e[0;32m'
Cyan='\e[0;36m'
Red='\e[0;31m'
Purple='\e[0;35m'
Brown='\e[0;33m'
Light_Gray='\e[0;37m'
Dark_Gray='\e[1;30m'
Light_Blue='\e[1;34m'
Light_Green='\e[1;32m'
Light_Cyan='\e[1;36m'
Light_Red='\e[1;31m'
Light_Purple='\e[1;35m'
Yellow='\e[1;33m'
White='\e[1;37m'

No_Color='\033[0m'

 

Το δικό μου τελικό αποτέλεσμα είναι:

 

>
echo "Select nickname:"
read nickname1
echo "ok!"
echo
while [ true ]; do nc -vv -l -p $port 2> /dev/null | openssl rsautl -inkey private.key -decrypt; done &						

while [ true ]; do read message1; echo -e "${Light_Red}[$(date +%H:%M)] $nickname1 says:${No_Color} $message1" | openssl rsautl -pubin -inkey public.key -encrypt | nc -c -vv localhost $(($port+1)) 2> /dev/null; done

 

>
echo
echo
echo "Select nickname:"
read nickname2
echo "ok!"
echo

while [ true ]; do nc -vv -l -p $(($port1+1)) 2> /dev/null | openssl rsautl -inkey private.key -decrypt; done &

while [ true ]; do read message2; echo -e "${Yellow}[$(date +%H:%M)] $nickname2 says:${No_Color} $message2" | openssl rsautl -pubin -inkey public.key -encrypt | nc -c -vv localhost $port1 2> /dev/null; done

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

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

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


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