Skip to content

tproxy, Python 2.7.13 and PyXAPI 0.1 - AttributeError: '_socketobject' object has no attribute 'recvmsg' #134

@S-trace

Description

@S-trace

Hello.
I am trying to make sshuttle with method tproxy work on OpenWRT router with Python 2.7.13 and PyXAPI 0.1, but after several seconds it failing with "AttributeError: '_socketobject' object has no attribute 'recvmsg'".

Full log:

root@OpenWrt:/# python -m sshuttle --listen 0.0.0.0:0 --remote s-trace@192.168.0.100 -vvvv 0.0.0.0/0 --method tproxy --dns
Starting sshuttle proxy.
firewall manager: Starting firewall with Python version 2.7.13
firewall manager: ready method name tproxy.
IPv6 enabled: False
UDP enabled: True
DNS enabled: True
Binding redirector: 12300
TCP redirector listening on ('0.0.0.0', 12300).
TCP redirector listening with <socket._socketobject object at 0x79c7b0>.
UDP redirector listening on ('0.0.0.0', 12300).
UDP redirector listening with <socket._socketobject object at 0x80a9f0>.
Binding DNS: 12300
DNS listening on ('0.0.0.0', 12300).
DNS listening with <socket._socketobject object at 0x8ddb90>.
Starting client with Python version 2.7.13
c : connecting to server...
c : executing: ['ssh', 's-trace@192.168.0.100', '--', 'exec /bin/sh -c \'P=python3.5; $P -V 2>/dev/null || P=python; exec "$P" -c \'"\]
c :  > channel=0 cmd=PING len=7 (fullness=0)
WARNING: Ignoring unknown option --
s-trace@192.168.0.100's password: 
server: assembling 'sshuttle' (7 bytes)
server: assembling 'sshuttle.cmdline_options' (44 bytes)
server: assembling 'sshuttle.helpers' (950 bytes)
server: assembling 'sshuttle.ssnet' (5625 bytes)
server: assembling 'sshuttle.hostwatch' (2368 bytes)
server: assembling 'sshuttle.server' (3544 bytes)
Starting server with Python version 3.5.2+
 s: latency control setting = True
 s: available routes:
c : Connected.
 s:   2/192.168.0.0/24
 s:   2/192.168.1.0/24
 s:  > channel=0 cmd=PING len=7 (fullness=0)
 s:  > channel=0 cmd=ROUTES len=34 (fullness=7)
 s: Waiting: 1 r=[4] w=[5] x=[] (fullness=41/0)
 s:   Ready: 1 r=[] w=[5] x=[]
 s: mux wrote: 15/15
 s: Waiting: 1 r=[4] w=[5] x=[] (fullness=41/0)
 s:   Ready: 1 r=[] w=[5] x=[]
 s: mux wrote: 42/42
 s: Waiting: 1 r=[4] w=[] x=[] (fullness=41/0)
c : Waiting: 4 r=[4, 7, 8, 11] w=[11] x=[] (fullness=7/0)
c :   Ready: 4 r=[11] w=[11] x=[]
c : <  channel=0 cmd=PING len=7
c :  > channel=0 cmd=PONG len=7 (fullness=7)
c : <  channel=0 cmd=ROUTES len=34
firewall manager: Got subnets: [(2, 0, False, '0.0.0.0')]
firewall manager: Got partial nslist: [(2, '127.0.0.1')]
firewall manager: Got nslist: [(2, '127.0.0.1')]
firewall manager: Got ports: 0,12300,0,12300
firewall manager: Got udp: True
firewall manager: setting up.
firewall manager: setting up IPv4.
>> iptables -t mangle -N sshuttle-m-12300
>> iptables -t mangle -F sshuttle-m-12300
>> iptables -t mangle -N sshuttle-d-12300
>> iptables -t mangle -F sshuttle-d-12300
>> iptables -t mangle -N sshuttle-t-12300
>> iptables -t mangle -F sshuttle-t-12300
>> iptables -t mangle -I OUTPUT 1 -j sshuttle-m-12300
>> iptables -t mangle -I PREROUTING 1 -j sshuttle-t-12300
>> iptables -t mangle -A sshuttle-d-12300 -j MARK --set-mark 1
>> iptables -t mangle -A sshuttle-d-12300 -j ACCEPT
>> iptables -t mangle -A sshuttle-t-12300 -m socket -j sshuttle-d-12300 -m tcp -p tcp
>> iptables -t mangle -A sshuttle-t-12300 -m socket -j sshuttle-d-12300 -m udp -p udp
>> iptables -t mangle -A sshuttle-m-12300 -j MARK --set-mark 1 --dest 127.0.0.1/32 -m udp -p udp --dport 53
>> iptables -t mangle -A sshuttle-t-12300 -j TPROXY --tproxy-mark 0x1/0x1 --dest 127.0.0.1/32 -m udp -p udp --dport 53 --on-port 12300
>> iptables -t mangle -A sshuttle-m-12300 -j MARK --set-mark 1 --dest 0.0.0.0/0 -m tcp -p tcp
>> iptables -t mangle -A sshuttle-t-12300 -j TPROXY --tproxy-mark 0x1/0x1 --dest 0.0.0.0/0 -m tcp -p tcp --on-port 12300
>> iptables -t mangle -A sshuttle-m-12300 -j MARK --set-mark 1 --dest 0.0.0.0/0 -m udp -p udp
>> iptables -t mangle -A sshuttle-t-12300 -j TPROXY --tproxy-mark 0x1/0x1 --dest 0.0.0.0/0 -m udp -p udp --on-port 12300
c : mux wrote: 15/15
c : mux wrote: 15/15
c : Waiting: 4 r=[4, 7, 8, 11] w=[] x=[] (fullness=14/0)
 s:   Ready: 1 r=[4] w=[] x=[]
 s: <  channel=0 cmd=PING len=7
 s:  > channel=0 cmd=PONG len=7 (fullness=41)
 s: <  channel=0 cmd=PONG len=7
 s: received PING response
 s: mux wrote: 15/15
 s: Waiting: 1 r=[4] w=[] x=[] (fullness=0/0)
c :   Ready: 4 r=[11] w=[] x=[]
c : <  channel=0 cmd=PONG len=7
c : received PING response
c : Waiting: 4 r=[4, 7, 8, 11] w=[] x=[] (fullness=0/0)
c :   Ready: 4 r=[8] w=[] x=[]
c : Accept UDP using socket_ext recvmsg.
firewall manager: undoing IPv4 changes.
>> iptables -t mangle -D OUTPUT -j sshuttle-m-12300
>> iptables -t mangle -F sshuttle-m-12300
>> iptables -t mangle -X sshuttle-m-12300
>> iptables -t mangle -D PREROUTING -j sshuttle-t-12300
>> iptables -t mangle -F sshuttle-t-12300
>> iptables -t mangle -X sshuttle-t-12300
>> iptables -t mangle -F sshuttle-d-12300
>> iptables -t mangle -X sshuttle-d-12300
firewall manager: undoing /etc/hosts changes.
Traceback (most recent call last):
  File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/usr/lib/python2.7/sshuttle/__main__.py", line 4, in <module>
    sys.exit(main())
  File "/usr/lib/python2.7/sshuttle/cmdline.py", line 74, in main
    opt.daemon, opt.pidfile)
  File "/usr/lib/python2.7/sshuttle/client.py", line 730, in main
    seed_hosts, auto_hosts, auto_nets, daemon)
  File "/usr/lib/python2.7/sshuttle/client.py", line 515, in _main
    ssnet.runonce(handlers, mux)
  File "/usr/lib/python2.7/sshuttle/ssnet.py", line 595, in runonce
    h.callback(s)
  File "/usr/lib/python2.7/sshuttle/client.py", line 123, in <lambda>
    lambda sock: callback(sock, method, mux, handlers)
  File "/usr/lib/python2.7/sshuttle/client.py", line 389, in ondns
    t = method.recv_udp(listener, 4096)
  File "/usr/lib/python2.7/sshuttle/methods/tproxy.py", line 120, in recv_udp
    srcip, dstip, data = recv_udp(udp_listener, bufsize)
  File "/usr/lib/python2.7/sshuttle/methods/tproxy.py", line 66, in recv_udp
    srcip, data, adata, flags = listener.recvmsg(
AttributeError: '_socketobject' object has no attribute 'recvmsg'

Attached full python -vvvv -m sshuttle --listen 0.0.0.0:0 --remote s-trace@192.168.0.100 -vvvv 0.0.0.0/0 --method tproxy --dns log too.
It is huge, but here is messages about socket_ext:

import socket_ext # from /usr/lib/python2.7/socket_ext.py
dlopen("/usr/lib/python2.7/lib-dynload/_socket_ext.so", 2);
import _socket_ext # dynamically loaded from /usr/lib/python2.7/lib-dynload/_socket_ext.so
c : Accept UDP using socket_ext recvmsg.

I used 9a9015a and metricube/PyXAPI@074d33c

What may be wrong?
Thank you.

python_log.zip

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions