Le Forum de l'Alliance Francophone

Nouvelles:

Auteur Sujet: Accès RPC  (Lu 4657 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne PhilTheNet

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2139
  •   
    • E-mail
le: 05 June 2015 à 20:48
Salut,

je suis en train de me développer un site/appli pour gérer mes machines depuis l'extérieur et j'ai un pb d'authentification au niveau des accès RPC

d'après la doc la séquence doit être :

1/Envoi de <auth1/>
2/Réception d'un code <nonce>nonecode</nonce>
3/envoi de <auth2><nonce_hash>authcode</auth2></nonce_hash> authcode étant le md5(nonecode.password) password étant celui contenu dans gui_rpc_auth.cfg

et j'ai systématiquement une réponse <unauthorized/>

Ven  5 jui 20:20:10 2015 |  | [gui_rpc] GUI RPC Command = '<boinc_gui_rpc_request><auth1/></boinc_gui_rpc_request>'
Ven  5 jui 20:20:10 2015 |  | [gui_rpc] GUI RPC reply: '<boinc_gui_rpc_reply><nonce>1433528410.650055</nonce></boinc_gui_rpc_reply>'
Ven  5 jui 20:20:10 2015 |  | [gui_rpc] GUI RPC Command = '<boinc_gui_rpc_request><auth2><nonce_hash>bc80555a803cf64fa3e5860788ec1746</nonce_hash></auth2></boinc_gui_rpc_request>'
Ven  5 jui 20:20:10 2015 |  | [gui_rpc] GUI RPC reply: '<boinc_gui_rpc_reply><unauthorized/></boinc_gui_rpc_reply>'

j'ai bien accès à la machine boinc  depuis un boincmanager d'une autre machine en réseau local en ayant bien positionné 
<allow_multiple_clients>1</allow_multiple_clients> et <allow_remote_gui_rpc>1</allow_remote_gui_rpc> et en me servant du password...

Quelqu'un a une idée   :??:





Hors ligne zOU

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2554
  •   
    • E-mail
Réponse #1 le: 05 June 2015 à 22:42
Rajoutes dans le fichier les ip et nom des pc qui se connectent.

remote_hosts.cfg

http://boinc.berkeley.edu/wiki/Controlling_BOINC_remotely

tu utilises un vpn ou ton ip externe et des ports uniques par pc ?



Hors ligne PhilTheNet

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2139
  •   
    • E-mail
Réponse #2 le: 05 June 2015 à 22:52
Merci mais c'est pas ca




Hors ligne modesti

  • CàA
  • Boinc'eur devant l'éternel
  • *****
  • Messages: 19058
  •   
    • Brocantes en Bourbonnais
    • E-mail
Réponse #3 le: 05 June 2015 à 22:55
Si c'est comme sur le forum, ça peut être l'ordre des balises dans cette séquence:
     <auth2><nonce_hash>authcode</auth2></nonce_hash>

Essaie avec:
     <auth2><nonce_hash>authcode</nonce_hash></auth2>


Edit: oublie, j'avais pas bien lu les messages que tu as rapporté. Là les balises sont dans le bon ordre. Désolée pour le dérangement.


Viendez chez nous, cause qu'on est les meilleur(e)s :D


In memoriam Jip - In memoriam Cocagne


Hors ligne zOU

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2554
  •   
    • E-mail
Réponse #4 le: 05 June 2015 à 22:56
Si c'est comme sur le forum, ça peut être l'ordre des balises dans cette séquence:
     <auth2><nonce_hash>authcode</auth2></nonce_hash>

Essaie avec:
     <auth2><nonce_hash>authcode</nonce_hash></auth2>

Spafo :)
(je me desabonne vu que j'ai tout faux :p)



Hors ligne zOU

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2554
  •   
    • E-mail
Réponse #5 le: 05 June 2015 à 22:58
Ven  5 jui 20:20:10 2015 |  | [gui_rpc] GUI RPC Command = '<boinc_gui_rpc_request><auth1/></boinc_gui_rpc_request>'

Spa </auth1> plutôt ?



Hors ligne PhilTheNet

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2139
  •   
    • E-mail
Réponse #6 le: 05 June 2015 à 23:02
Rajoutes dans le fichier les ip et nom des pc qui se connectent.

remote_hosts.cfg

http://boinc.berkeley.edu/wiki/Controlling_BOINC_remotely

tu utilises un vpn ou ton ip externe et des ports uniques par pc ?

le remote_hosts.cfg ne sert pas avec allow_remote_gui_rpc d'après ce que j'ai capté de la doc et ca me semble confirmé par le fait que je peux me connecter depuis une autre machine avec boincmanager
et
"tu utilises un vpn ou ton ip externe et des ports uniques par pc ?" => ip externe et la communication se passe bien cf les lignes de logs
La nuit porte conseil dit-on alors wait & scie des buches...  :desole:





Hors ligne Sébastien

  • Gentil admin
  • Boinc'eur devant l'éternel
  • *******
  • Messages: 2455
  •   
Réponse #7 le: 06 June 2015 à 08:43
D'après le code source de BOINC, le nonce_hash est le hash md5 de la concaténation noncepassword
Il n'y a pas de point entre nonce et password.



Hors ligne PhilTheNet

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2139
  •   
    • E-mail
Réponse #8 le: 06 June 2015 à 08:53
Merci pour la réponse mais le point symbolise la concaténation dans ma phrase, en php ca donne ca : $auth=md5($nonce.$password);

L'équivalent en cpp :
n = snprintf(buf, sizeof(buf), "%s%s", nonce, passwd);
md5_block((const unsigned char*)buf, (int)strlen(buf), nonce_hash);
sprintf(buf, "<auth2>\n<nonce_hash>%s</nonce_hash>\n</auth2>\n", nonce_hash);

 :kookoo:
« Modifié: 06 June 2015 à 08:57 par PhilTheNet »




Hors ligne Maurice Goulois

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 4544
  •   
    • Le forum des Electrons Libres de l'AF
Réponse #9 le: 06 June 2015 à 09:46
J'avais fait un dev pour remplacer BoincView, j'ai arrêté pour cause de manque de temps et BoincTasks venait de sortir.

Là c'est du code PureBasic, les constantes (remarque les LF$, CRLF$ et chr(3))
RPC encapsulation strings
#_RPC_REQ_BEG = "<boinc_gui_rpc_request>" + #CRLF$
#_RPC_REQ_END = #LF$ + "</boinc_gui_rpc_request>" + Chr(3)
#_RPC_REP_BEG = "<boinc_gui_rpc_reply>"
#_RPC_REP_END = "</boinc_gui_rpc_reply>"
; Requests strings
#_REQ_AUTH_1ST = "<auth1/>"
#_REQ_AUTH_NONCE_BEG = "<auth2>" + #LF$ + "<nonce_hash>"
#_REQ_AUTH_NONCE_END = "</nonce_hash>" + #LF$ + "</auth2>"
#_REQ_ALL_PROJ = "<get_all_projects_list/>"
#_REQ_PROJ_STAT = "<get_project_status/>"
#_REQ_SIMPLE_GUI = "<get_simple_gui_info/>"
#_REQ_MESSAGES = "<get_messages/>"
#_REQ_MESSAGES_SEQNO = "<get_messages><seqno></get_messages>"
#_REQ_TRANSFERS = "<get_file_transfers/>"
#_REQ_STATE = "<get_state/>"
#_REQ_HOSTINFO = "<get_host_info/>"
; Replies strings
#_REP_NONCE_BEG = "<nonce>"
#_REP_NONCE_END = "</nonce>"
#_REP_AUTH_OK = "<authorized/>"
#_REP_AUTH_NOK = "<unauthorized/>"
#_REP_PROJ_BEG = "<projects>"
#_REP_PROJ_END = "</projects>"
#_REP_STATE_BEG = "<client_state>"
#_REP_STATE_END = "</client_state>"
La procédure d'auth
Procedure.b bsRpcAuth(bsCnxID, bsPassword.s)
;- bsRpcAuth    = authenticate with a BOINC server for RPC
;               - bsCnxID is the id of the previously established connection to the server
;               - bsPassword is the password string to be used

  ;DBG_OK
  DBG_KO
 
  DBG_num("bsRpcAuth - ", bsCnxID)
  ; First step of authorization, request the "nonce" value
  Protected sNonceReply.s = bsRpcRequest(bsCnxID, #_REQ_AUTH_1ST)
  ; Extract nonce value from reply
  Protected sNonceRequest.s = sUnTagData(#_REP_NONCE_BEG, sNonceReply, #_REP_NONCE_END)
  ; Add password string to complete
  sNonceRequest = sNonceRequest + bsPassword
  ; Create the second step string with MD5
  Protected sAuthRequest.s = MD5Fingerprint(@sNonceRequest, Len(sNonceRequest))
  ; Add tags And controls
  sAuthRequest = #_REQ_AUTH_NONCE_BEG + sAuthRequest + #_REQ_AUTH_NONCE_END
  ; Do the request
  Protected sAuthReply.s = bsRpcRequest(bsCnxID, sAuthRequest)
  ; Analyze reply, we just need to know If the server sent an "authorized"
  DBG_str("bsRpcAuth - ", sAuthReply)
  If FindString(sAuthReply, #_REP_AUTH_OK, 1) > 0
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
           
EndProcedure

Et la proc de requête rpc (pour info, je pense que la partie qui peut t'aider réside dans la procédure auth au-dessus, avec le séquencement des requêtes)

Procedure.s bsRpcRequest(bsCnxID, sRequest.s)
;- bsRpcRequest = sends RPC request to a BOINC server
;               - bsCnxID is the id of the previously established connection to the server
;               - sRequest is the request string without the default enclosing tags
;                 which are automatically added to each request string
  ;DBG_OK
  DBG_KO 
  DBG_numstr("bsRpcRequest - ", bsCnxID, sRequest)
 
  ; Check conditions for continuing
  If bsCnxID <> 0 And sRequest <> ""
 
    Protected lBufferSize = 1024 * 16
 
    ; Add surrounding boinc rpc tags And control chars
    Protected sPreparedRequest.s = #_RPC_REQ_BEG + sRequest + #_RPC_REQ_END

    ; Prepare the buffer
    Protected sRpcBuffer.s = Space(lBufferSize)

    ; Send the rpc request to the server.
    SendNetworkData(bsCnxID, @sPreparedRequest, Len(sPreparedRequest))
 
    ; Receive the Boinc server's response.
    Protected lBytesReceived = 0, sRpcResponse.s = "", bQuit = #False ; Work variables
 
    Repeat
      ; Have we received data from server
      If NetworkClientEvent(bsCnxID)
        ; then get data
        lBytesReceived = ReceiveNetworkData(bsCnxID, @sRpcBuffer, lBufferSize)
       
        DBG_num("bsRpcRequest - ", lBytesReceived)
     
        ; How much data did we receive
        If lBytesReceived
          ; At least some data, append it to final string
          sRpcResponse = sRpcResponse + Left(sRpcBuffer, lBytesReceived)
          ;sRpcResponse = sRpcResponse + sRpcBuffer
  ;         ; If less than buffer, it's the last chunk
  ;         If lBytesReceived < lBufferSize
          ; If less than buffer, it's the last chunk
          ;If lBytesReceived < lBufferSize Or FindString(sRpcBuffer, Chr(3), 1) ;< lBufferSize
          If FindString(sRpcBuffer, Chr(3), 1) ;< lBufferSize
            ; then we have finished
            bQuit = #True
          EndIf
        Else
          ; No data at all, that's all
          bQuit = #True
        EndIf
       
      EndIf
     
    Until bQuit
 
    Protected sRpcFinal.s = Trim(sRpcResponse)
 
    DBG_numstr("bsRpcRequest - sRpcFinal - ", Len(sRpcFinal), sRpcFinal)

    ; Return request's reply after removing rpc reply tags
    ; - trim stuff to resize string passed to untag, otherwise keeps buffer's size
    sRpcFinal = sUnTagData(#_RPC_REP_BEG, sRpcFinal, #_RPC_REP_END)
 
    DBG_numstr("bsRpcRequest - sRpcFinal 2 - ", Len(sRpcFinal), sRpcFinal)
 
      ; Clean up unwanted spaces
    sRpcFinal = Trim(sRpcFinal)
 
    DBG_numstr("bsRpcRequest - sRpcFinal 3 - ", Len(sRpcFinal), sRpcFinal)
 
    ; avoid a bug With & symbol. Handle this better!
    ; sRpcResponse = sRpcRequest.Replace("&", "_")

    ;RpcRequest = "Err: " & _socket.Connected

    ProcedureReturn sRpcFinal
   
  Else
 
    Debug "bsRpcRequest - Invalid params"
    ProcedureReturn ""
 
  EndIf

EndProcedure ; RpcRequest

la proc de nettoyage des tags utilisée
Procedure.s sUnTagData(sStartTag.s, sSource.s, sEndTag.s)
  ;DBG_OK
  DBG_KO
  DBG_str("sUnTagData - ", sSource)
  DBG_str("sUnTagData - ", sStartTag)
  DBG_str("sUnTagData - ", sEndTag)
 
  Protected sUntagged.s = ""
  ; Determine position of first tag
  Protected lSubStart.l = FindString(sSource, sStartTag, 1)
  ; Create new string without first tag
  sUntagged = Mid(sSource, lSubStart + Len(sStartTag))
 
  DBG_str("sUnTagData 1 - ", sUntagged)
 
  ; Determine position of last tag
  Protected lSubEnd.l = FindString(sUntagged, sEndTag, 1)

  DBG_num("sUnTagData 1.5 - ", lSubEnd)
 
  ; Create new string without last tag
  sUntagged = Mid(sUntagged, 1, lSubEnd - 1)

  DBG_str("sUnTagData 2 - ", sUntagged)
 
  ProcedureReturn sUntagged

Si ça peut t'aider (désolé c'est un peu parsemé de code de debug)

J'avais commencé en VB.NET mais les perfs étaient vraiment décevantes  :lol: comparé à la légèreté du Delphi de BV
« Modifié: 06 June 2015 à 10:06 par maugou »



Hors ligne PhilTheNet

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2139
  •   
    • E-mail
Réponse #10 le: 06 June 2015 à 10:17
merci beaucoup pour le code je vais lire tout ca

j'ai trouvé l'erreur, le code nonce de retour était mal "parsé" donc ma réponse md5 était fausse....

 :hello:




Hors ligne Maurice Goulois

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 4544
  •   
    • Le forum des Electrons Libres de l'AF
Réponse #11 le: 06 June 2015 à 10:20
Je pense que t'es pas loin de la soluce, c'est l'enchainement des requêtes avec la constitution de la chaine d'auth qui est l'élément important.

auth1 te donne le nonce, tu le concatènes au mot de passe, tu md5 le tout et tu le renvoies inséré dans la requête auth2, et voilà  :jap:

j'aurais pu te dire ça depuis le début mais j'avais pas mis le nez dans ce code depuis des années  :desole:
« Modifié: 06 June 2015 à 10:27 par maugou »



Hors ligne PhilTheNet

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2139
  •   
    • E-mail
Réponse #12 le: 06 June 2015 à 10:27
yes, connecté!

 :kookoo:




Hors ligne Maurice Goulois

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 4544
  •   
    • Le forum des Electrons Libres de l'AF
Réponse #13 le: 06 June 2015 à 10:28
Cool  :bipbip: :bipbip: :bipbip: :bipbip:

En fait à l'époque j'ai fait deux fois le dev jusqu'au bout  :lol: en vb.net et en PB, et la version PB était correcte, mais le parsing du xml (avec les méthodes intégrées dans chaque outil) était catastrophiquement consommateur de cpu, j'étais en train de chercher une lib alternative, que j'avais trouvé mais j'ai dù arrêter à ce moment-là.
« Modifié: 06 June 2015 à 10:34 par maugou »



Hors ligne JeromeC

  • CàA
  • Boinc'eur devant l'éternel
  • *****
  • Messages: 31108
  •   
Réponse #14 le: 07 June 2015 à 10:01
C'est très choli mais boinctasks ne répond pas  à tes besoins, ou c'est juste que tu préfères le tien à toi tout seul ?

A quoi bon prendre la vie au sérieux, puisque de toute façon nous n’en sortirons pas vivants ? (Alphonse Allais)



Hors ligne PhilTheNet

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2139
  •   
    • E-mail
Réponse #15 le: 07 June 2015 à 17:31
C'est mon taf de faire des sites,des applis pc et des applis phone comme j'ai un creux au niveau planning je me fais un petit projet site/appli/phone

 :kookoo:




Hors ligne Maurice Goulois

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 4544
  •   
    • Le forum des Electrons Libres de l'AF
Réponse #16 le: 07 June 2015 à 18:01
Pour ma part, l'absence de solution opensource comme BoincView ou BoincTasks aujourd'hui, me chagrine et je retenterai le coup quand je pourrai.
« Modifié: 07 June 2015 à 18:08 par maugou »



Hors ligne PhilTheNet

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2139
  •   
    • E-mail
Réponse #17 le: 07 June 2015 à 18:04
Pour ma part, l'absence de solution opensource comme BoincView ou BoincTasks aujourd'hui, me chagrine et je retenterai le coup quand je pourrai.

On peut lancer le projet si tu veux

 :sun:




Hors ligne Maurice Goulois

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 4544
  •   
    • Le forum des Electrons Libres de l'AF
Réponse #18 le: 07 June 2015 à 18:12
J'avais ouvert le projet sur sourceforge mais la vie m'a stoppé en plein élan :desole: C'était censé s'appeler BoincWorkstation, et j'avais des objectifs plus étendus que ce que permettait BoincView à l'époque.

Je suis pas en condition pour reprendre tout de suite, je traverse un deuil maousse et je dois me réinstaller ailleurs dans une nouvelle vie; ça va m'occuper quelque temps. Mais je ne lâche pas l'affaire, c'est une vrai lacune dans le monde Boinc.

BoincTasks est plutôt bon en remplaçant de BoincView, mais pas opensource (corrigez-moi si me goure) et sans les fonctionnalités que je souhaite voir.
« Modifié: 07 June 2015 à 18:15 par maugou »



Hors ligne PhilTheNet

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2139
  •   
    • E-mail
Réponse #19 le: 07 June 2015 à 18:14
Ah ok, désolé pour toi  :/




Hors ligne Maurice Goulois

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 4544
  •   
    • Le forum des Electrons Libres de l'AF
Réponse #20 le: 07 June 2015 à 18:18
C'est plus l'aspect pratique qui joue, le deuil est en parallèle, je dois déménager hors de Paris et trouver un taf pour ce faire. J'arrête de squatter le topic, tu me mp si tu veux  :jap:



Hors ligne JeromeC

  • CàA
  • Boinc'eur devant l'éternel
  • *****
  • Messages: 31108
  •   
Réponse #21 le: 07 June 2015 à 20:34
Condoléances...

Boinctasks est déclaré open source sur plusieurs sites ou on en parle (suite recherche) mais rien sur le site de BT lui même...

A quoi bon prendre la vie au sérieux, puisque de toute façon nous n’en sortirons pas vivants ? (Alphonse Allais)



Hors ligne Maurice Goulois

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 4544
  •   
    • Le forum des Electrons Libres de l'AF
Réponse #22 le: 08 June 2015 à 02:36
Toutes les références que je trouve disent BoincTask libre, pas opensource, BoincView était dans le même cas et du jour au lendemain plus de nouvelles de l'auteur et exit BV. Je trouve ça dommage pour Boinc.

Même si BoincTasks est un remplaçant plus que correct, le problème reste entier.



Hors ligne JeromeC

  • CàA
  • Boinc'eur devant l'éternel
  • *****
  • Messages: 31108
  •   
Réponse #23 le: 08 June 2015 à 08:39
Alors au boulot ! :D

A quoi bon prendre la vie au sérieux, puisque de toute façon nous n’en sortirons pas vivants ? (Alphonse Allais)



Hors ligne PhilTheNet

  • Boinc'eur devant l'éternel
  • *****
  • Messages: 2139
  •   
    • E-mail
Réponse #24 le: 08 June 2015 à 08:43
C'est en cours

 :D