Reading time: 116 – 194 minutes
La segona part sobre la trilogia de SOCKS5.
El podcast:
[display_podcast]
Exemples extrets del XEP-0065:
Example 1. Initiator Sends Service Discovery Request to Target
<iq type='get' from='initiator@example.com/foo' to='target@example.org/bar' id='hello'> <query xmlns='http://jabber.org/protocol/disco#info'/> </iq>
Example 2. Target Replies to Service Discovery Request
<iq type='result' from='target@example.org/bar' to='initiator@example.com/foo' id='hello'> <query xmlns='http://jabber.org/protocol/disco#info'> <identity category='proxy' type='bytestreams' name='SOCKS5 Bytestreams Service'/> <feature var='http://jabber.org/protocol/bytestreams'/> </query> </iq>
Example 3. Initiator Sends Service Discovery Request to Server
<iq type='get' from='initiator@example.com/foo' to='example.com' id='server_items'> <query xmlns='http://jabber.org/protocol/disco#items'/> </iq>
Example 4. Server Replies to Service Discovery Request
<iq type='result' from='example.com' to='initiator@example.com/foo' id='server_items'> <query xmlns='http://jabber.org/protocol/disco#items'> <item jid='streamhostproxy.example.net' name='Bytestreams Proxy'/> </query> </iq>
Example 5. Initiator Sends Service Discovery Request to Proxy
<iq type='get' from='initiator@example.com/foo' to='streamhostproxy.example.net' id='proxy_info'> <query xmlns='http://jabber.org/protocol/disco#info'/> </iq>
Example 6. Server Replies to Service Discovery Request
<iq type='result' from='streamhostproxy.example.net' to='initiator@example.com/foo' id='proxy_info'> <query xmlns='http://jabber.org/protocol/disco#info'> <identity category='proxy' type='bytestreams' name='SOCKS5 Bytestreams Service'/> <feature var='http://jabber.org/protocol/bytestreams'/> </query> </iq>
Example 7. Initiator Requests Network Address from Proxy
<iq type='get' from='initiator@example.com/foo' to='streamhostproxy.example.net' id='discover'> <query xmlns='http://jabber.org/protocol/bytestreams' sid='vxf9n471bn46'/> </iq>
Example 8. Proxy Informs Initiator of Network Address
<iq type='result' from='streamhostproxy.example.net' to='initiator@example.com/foo' id='discover'> <query xmlns='http://jabber.org/protocol/bytestreams'> sid='vxf9n471bn46'> <streamhost jid='streamhostproxy.example.net' host='24.24.24.1' p zeroconf='_jabber.bytestreams'/> </query> </iq>
Example 9. Proxy Returns Error to Initiator
<iq type='error' from='initiator@example.com/foo' to='streamhostproxy.example.net' id='discover'> <query xmlns='http://jabber.org/protocol/bytestreams' sid='vxf9n471bn46'/> <error code='403' type='auth'> <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> </error> </iq>
Example 10. Proxy Returns Error to Initiator
<iq type='error' from='initiator@example.com/foo' to='streamhostproxy.example.net' id='discover'> <query xmlns='http://jabber.org/protocol/bytestreams' sid='vxf9n471bn46'/> <error code='405' type='cancel'> <not-allowed xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> </error> </iq>
Example 11. Initiation of Interaction
<iq type='set' from='initiator@example.com/foo' to='target@example.org/bar' id='initiate'> <query xmlns='http://jabber.org/protocol/bytestreams' sid='vxf9n471bn46' mode='tcp'> <streamhost jid='initiator@example.com/foo' host='192.168.4.1' port='5086'/> <streamhost jid='streamhostproxy.example.net' host='24.24.24.1' zeroconf='_jabber.bytestreams'/> </query> </iq>
Example 12. Target Refuses Bytestream
<iq type='error' from='target@example.org/bar' to='initiator@example.com/foo' id='initiate'> <error code='406' type='auth'> <not-acceptable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> </error> </iq>
Example 13. Target Is Unable to Connect to Any StreamHost and Wishes to End Transaction
<iq type='error' from='target@example.org/bar' to='initiator@example.com/foo' id='initiate'> <error code='404' type='cancel'> <item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> </error> </iq>
Example 16. Target Notifies Initiator of Connection
<iq type='result' from='target@example.org/bar' to='initiator@example.com/foo' id='initiate'> <query xmlns='http://jabber.org/protocol/bytestreams' sid='vxf9n471bn46'> <streamhost-used jid='streamhostproxy.example.net'/> </query> </iq>
Example 19. Initiator Requests Activation of Bytestream
<iq type='set' from='initiator@example.com/foo' to='streamhostproxy.example.net' id='activate'> <query xmlns='http://jabber.org/protocol/bytestreams' sid='vxf9n471bn46'> <activate>target@example.org/bar</activate> </query> </iq>
Example 20. Proxy Informs Initiator of Activation
<iq type='result' from='streamhostproxy.example.net' to='initiator@example.com/foo' id='activate'/>
Referències:
- Apunts per fer el podcast: fitxer .txt amb la llista de coses que volia comentar al podcast és una barreja de català, castellà i anglès.
- RFC i XEPs:
- RFC1928: SOCKS Protocol v5
- XEP-0065: SOCKS5 Bytestream
- XEP-0030: Service Discovery
- Extencions del XMPP: tots els XEPs
<iq type=’get’
from=’initiator@example.com/foo’
to=’target@example.org/bar’
id=’hello’>
<query xmlns=’http://jabber.org/protocol/disco#info’/>
</iq>
from=’initiator@example.com/foo’
to=’target@example.org/bar’
id=’hello’>
<query xmlns=’http://jabber.org/protocol/disco#info’/>
</iq>