wm withdraw .; wm withdraw .output; wm geom .konsola 804x492+200+14; # Puszcz wm geom .konsola 762x1020+772+35; # Morasko wm geom .konsola 835x699+517+7; kons_font 11; # A0-4, laptopy ## ZeroMQ, 09.2018 # + security, metoda PLAIN + ZAP # + zmq ma 3 metody: NULL, PLAIN, CURVE # + opisy security w zmq: # https://rfc.zeromq.org/spec:23/ZMTP/ # https://rfc.zeromq.org/spec:27/ZAP/ # https://rfc.zeromq.org/spec:24/ZMTP-PLAIN/ # http://hintjens.com/blog:45 # http://hintjens.com/blog:48 # http://hintjens.com/blog:49 # + ZAP: gdzie kod sprawdzajacy username/password ? # trzeba podlaczyc handler pod "inproc://zeromq.zap.01" # dziwna reakcja na bledne haslo po stronie klienta(?) # to chyba blad w libzmq 4.1.5 ?!?! # mozna obejsc ten blad przez flage DONTWAIT w send i recv; # ale nie do konca... # moze potrzebna nowsza wersja libzmq ?!?! # okazuje sie ze niezbedna jest wersja libzmq 4.2.5 # zmodyfikowana wersja tclzmq # oraz wlaczenie draftowych flag monitora # ktore moga nie dzialac... (chyba nie dzialaja prawidlowo?!) # wszystko razem dosc kontrowersyjne... # info o blednym hasle przychodzi jako zdarzenie... # WNIOSEK: uzywac starej wersji i triku z CONNECTED # do wykrywania czy uwierzytelnianie sie udalo... # jednak jest pewien problem z tym podejsciem: # nie wiadomo ile zdarzen (DIS)CONNECTED przyjdzie i ktore jest ostnie... # exec tclkit8.6b1 alr_zmq03ser.tcl & #% 21244 proc err args {catch $args err; set err} lappend auto_path ./zeromq package re zmq #% 4.0.1 zmq version #% 4.1.5 zmq context ctx zmq socket s2 ctx REQ s2 config IDENTITY 1234 s2 config PLAIN_USERNAME "qqq" s2 config PLAIN_PASSWORD "123" zmq monitor ctx s2 eee proc eee args { puts "[info level 0]" if {[lindex $args 0 1]=="CONNECTED"} {set ::CONNECTED 1} if {[lindex $args 0 1]=="DISCONNECTED"} {set ::CONNECTED 0} } # + NIE pokazuje bledu przy connect z blednym haslem ?!?!?! # + po przejsciu na nowa wersje i zmianach w tclzmq pokazuje... # dlaczego pokazuje tez CONNECT_RETRIED ?!?! blad ? # + cos jest nie tak z tymi komunikatami... # dlaczego nie ma HANDSHAKE_SUCC # + przy starej wersji libzmq mozna sie posluzyc flagami # CONNECTED i DISCONNECTED (!!!) # klient set CONNECTED 0; s2 connect "tcp://localhost:7777"; after 300; update; set CONNECTED #% 0 #% 1 # + connect wysyla zdarzenia do kolejki zdarzen... # + jesli CONNECTED tzn. ze uwierzytelnienie sie udalo i mozna wyw. send/recv # + jest problem ani vwait ani update nie dzialaja prawidlow... ?!?!?! # "after 300; update" to prymitywne rozwiazanie bez gwarancji... s2 send "a ku ku 1" #% s2 recv #% odp na: {a ku ku 1} s2 recv DONTWAIT s2 disconnect "tcp://localhost:7777" s2 config PLAIN_PASSWORD "123" s2 config PLAIN_PASSWORD "1234" # + reakcja na bledne haslo jest dziwna... zawieszenie? # jak to wykryc ?!?!?!?!!?!? # okazuje sie ze flaga DONTWAIT pomaga... # zwraca "Resource temporarily unavailable" # + po uaktualnieniu tclzmq oraz po przejsciu na libzmq 4.2.5 (zamiast 4.1.5) # otrzymujemy informacje HANDSHAKE_FAILED_AUTH... # czy to wystarczy? to jest tylko DRAFT... # + jesli w trybie bez polaczenia wywolac send, to potem jest problem bo # zmq nie pozwala na drugie send; jedyne wyjcie to "s2 destroy" i utworzyc s2 od nowa... s2 config #% {SNDHWM 1000} {RCVHWM 1000} {AFFINITY 0} {IDENTITY 1234} {RATE 100} {RECOVERY_IVL 10000} {SNDBUF 0} {RCVBUF 0} {RCVMORE 0} {EVENTS POLLOUT} {TYPE 3} {LINGER -1} {RECONNECT_IVL 100} {BACKLOG 100} {RECONNECT_IVL_MAX 0} {MAXMSGSIZE -1} {MULTICAST_HOPS 1} {RCVTIMEO -1} {SNDTIMEO -1} {LAST_ENDPOINT tcp://localhost:7777} {TCP_KEEPALIVE -1} {TCP_KEEPALIVE_CNT -1} {TCP_KEEPALIVE_IDLE -1} {TCP_KEEPALIVE_INTVL -1} {IMMEDIATE 0} {MECHANISM PLAIN} {PLAIN_SERVER 0} {PLAIN_USERNAME qqq} {PLAIN_PASSWORD 1234} {CURVE_SERVER {}} {CURVE_PUBLICKEY {}} {CURVE_SECRETKEY {}} {CURVE_SERVERKEY {}} {ZAP_DOMAIN {}} {IPV6 0} zmq have_libsodium #% 1 s2 destroy exit