Menu

Hidden services + JRuby

2012-08-27
2013-01-21
  • luisa herneste

    luisa herneste - 2012-08-27

    I'm posting here because I've tried for hours a solution.
    This project is about easy blog pubblication for activist.
    I know JRuby is not supported but the syntax is clear and it will be really helpfull,
    I probably didn't understand fully the low level design backing tor startup.
    Here is my code:

    #<<client.rb>>
    require 'rubygems'
    require 'java'
    require 'logger'
    @logger = Logger.new(STDERR)
    here = File.expand_path(File.dirname(__FILE__))
    $LOAD_PATH << "#{here}"
    jars_dir = here + "/lib/jars"
    $LOAD_PATH << jars_dir
    #Dir["lib/*.jar"].each { |jar| require jar } #TO_TEST CROSS-PLATFORM
    Dir.entries(jars_dir).sort.each do |entry|
      if entry =~ /.jar$/
        @logger.info "JAVA: Requiring #{entry}"
        require entry
      end
    end
    ##################################################
    #     create tor proxy on port 1080
    #java_import "org.silvertunnel.netlib.tool.NetlibProxy"
    #args = ["0.0.0.0:1080","socks_over_tor_over_tls_over_tcpip"].to_java(:string)
    #org.silvertunnel.netlib.tool.NetlibProxy.main(args)
    #puts org.silvertunnel.netlib.api.NetLayer.public_instance_methods
    # << SUCCESS
    #     create new private+public hidden service key
    org.silvertunnel.netlib.layer.tor.TorNetLayerUtil.getInstance()
    keypair = org.silvertunnel.netlib.layer.tor.util.Encryption.createNewRSAKeyPair()
    newnetaddress = org.silvertunnel.netlib.layer.tor.TorHiddenServicePrivateNetAddress.new(keypair.getPublic(),keypair.getPrivate())
    # << SUCCESS
    #onion address
    puts newnetaddress.getPublicOnionHostname
    # << SUCCESS
    #    define local listening address inclusive port
    netaddress = org.silvertunnel.netlib.layer.tor.TorHiddenServicePortPrivateNetAddress.new(newnetaddress,80)
    #    // get TorNetLayer instance and wait until it is ready
    #    NetLayer netLayer = NetFactory.getInstance().getNetLayerById(NetLayerIDs.TOR);
    #    netLayer.waitUntilReady();
    netlayer = org.silvertunnel.netlib.api.NetFactory.getInstance().getNetLayerById("NetLayerIDs.TOR")
    netlayer.waitUntilReady()
    # << SEVERE: could not create NetLayerFactory of NetLayerIDs.TOR
    #    Create Tor over TLS/SSL over TCP/IP layer
    #    torNetLayer = new TorNetLayer(loggingTlsNetLayer, /*loggingT*/tcpipDirNetLayer, TempfileStringStorage.getInstance());
    #    NetFactory.getInstance().registerNetLayer(NetLayerIDs.TOR_OVER_TLS_OVER_TCPIP, torNetLayer);
    #    torNetLayer.waitUntilReady();
    tempfile = org.silvertunnel.netlib.util.TempfileStringStorage.getInstance()
    tornetlayer = org.silvertunnel.netlib.layer.tor.TorNetLayer.new("127.0.0.1", "80", tempfile)
    org.silvertunnel.netlib.api.NetLayerFactory.getInstance().registerNetLayer("NetLayerIDs.TOR_OVER_TLS_OVER_TCPIP", tornetlayer)
    tornetlayer.waitUntilReady()
    # << NameError: no constructorfor arguments (org.jruby.RubyString,org.jruby.RubyString,org.silvertunnel.netlib.util.TempfileStringStorage)
    #<</client.rb>>
    

    System information:
    100% tests good with JUnit
    JARs loaded: bcprov-jdk15-145.jar jdom.jar silvertunnel.org_netlib.jar
    Version: netlib 0.13
    To test: install jruby, copy the 3 .jar to client/lib/jars/ and run client/client.rb with jruby

     
  • Christian Hapke

    Christian Hapke - 2012-08-27

    Hi,

    one mistake is the assumption that you use a String "NetLayerIDs.TOR" - instead it is a field TOR of class NetLayerIDs. Same same with "NetLayerIDs.TOR_OVER_TLS_OVER_TCPIP".

    Beside these thing I'm not sure what you want with the call of method registerNetLayer().

    I hope, this helps,

    Christian

     
  • luisa herneste

    luisa herneste - 2012-08-29

    Thanks! it worked, if anyone need it, here's the code to run tor(tor proxy automation is in 1 topic) in jruby:
    For Hidden service I can't find the exact call to createNetServerSocket.

    #    // get TorNetLayer instance and wait until it is ready
    #    NetLayer netLayer = NetFactory.getInstance().getNetLayerById(NetLayerIDs.TOR);
    #    netLayer.waitUntilReady();
    netlayer = org.silvertunnel.netlib.api.NetFactory.getInstance().getNetLayerById(org.silvertunnel.netlib.api.NetLayerIDs.TOR_OVER_TLS_OVER_TCPIP)
    netlayer.waitUntilReady()
    # << SUCCESS
    
     

Log in to post a comment.