mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-24 04:13:28 +01:00
r8895@Kushana: nickm | 2006-09-21 20:05:11 -0400
Debug client-side reverse dns code. svn:r8452
This commit is contained in:
parent
213658f117
commit
6b3f6afb58
@ -36,7 +36,9 @@ def socks5ResolveRequest(hostname, atype=0x03, command=0xF0):
|
|||||||
version = 5
|
version = 5
|
||||||
rsv = 0
|
rsv = 0
|
||||||
port = 0
|
port = 0
|
||||||
reqheader = struct.pack("!BBBBB",version, command, rsv, atype, len(hostname))
|
reqheader = struct.pack("!BBBB",version, command, rsv, atype)
|
||||||
|
if atype == 0x03:
|
||||||
|
reqheader += struct.pack("!B", len(hostname))
|
||||||
portstr = struct.pack("!H",port)
|
portstr = struct.pack("!H",port)
|
||||||
return "%s%s%s"%(reqheader,hostname,portstr)
|
return "%s%s%s"%(reqheader,hostname,portstr)
|
||||||
|
|
||||||
@ -62,8 +64,11 @@ def socks5ParseResponse(r):
|
|||||||
# not really the right way to format IPv6
|
# not really the right way to format IPv6
|
||||||
return "IPv6: %s"%(":".join([hex(ord(c)) for c in addr]))
|
return "IPv6: %s"%(":".join([hex(ord(c)) for c in addr]))
|
||||||
else:
|
else:
|
||||||
nul = r.index('\0',4)
|
hlen, = struct.unpack("!B", r[4])
|
||||||
return r[4:nul]
|
expected_len = 5 + hlen + 2
|
||||||
|
if len(r) < expected_len:
|
||||||
|
return None
|
||||||
|
return r[5:-2]
|
||||||
|
|
||||||
def socks5ResolvePTRRequest(hostname):
|
def socks5ResolvePTRRequest(hostname):
|
||||||
return socks5ResolveRequest(socket.inet_aton(hostname),
|
return socks5ResolveRequest(socket.inet_aton(hostname),
|
||||||
@ -105,7 +110,6 @@ def resolve(hostname, sockshost, socksport, socksver=4, reverse=0):
|
|||||||
if socksver == 5:
|
if socksver == 5:
|
||||||
s.send(socks5Hello())
|
s.send(socks5Hello())
|
||||||
socks5ParseHello(s.recv(2))
|
socks5ParseHello(s.recv(2))
|
||||||
print len(fmt(hostname)), len(hostname)
|
|
||||||
s.send(fmt(hostname))
|
s.send(fmt(hostname))
|
||||||
answer = s.recv(6)
|
answer = s.recv(6)
|
||||||
result = parse(answer)
|
result = parse(answer)
|
||||||
@ -127,7 +131,7 @@ if __name__ == '__main__':
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
socksver = 4
|
socksver = 4
|
||||||
reverse = 0
|
reverse = 0
|
||||||
while sys.argv[1] == '-':
|
while sys.argv[1][0] == '-':
|
||||||
if sys.argv[1] in ("-4", "-5"):
|
if sys.argv[1] in ("-4", "-5"):
|
||||||
socksver = int(sys.argv[1][1])
|
socksver = int(sys.argv[1][1])
|
||||||
del sys.argv[1]
|
del sys.argv[1]
|
||||||
@ -138,7 +142,7 @@ if __name__ == '__main__':
|
|||||||
break
|
break
|
||||||
|
|
||||||
if len(sys.argv) >= 4:
|
if len(sys.argv) >= 4:
|
||||||
print "Syntax: resolve.py [-4|-5] hostname [sockshost:socksport]"
|
print "Syntax: resolve.py [-x] [-4|-5] hostname [sockshost:socksport]"
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
if len(sys.argv) == 3:
|
if len(sys.argv) == 3:
|
||||||
sh,sp = parseHostAndPort(sys.argv[2])
|
sh,sp = parseHostAndPort(sys.argv[2])
|
||||||
|
@ -947,7 +947,8 @@ circuit_get_open_circ_or_launch(edge_connection_t *conn,
|
|||||||
tor_assert(conn);
|
tor_assert(conn);
|
||||||
tor_assert(circp);
|
tor_assert(circp);
|
||||||
tor_assert(conn->_base.state == AP_CONN_STATE_CIRCUIT_WAIT);
|
tor_assert(conn->_base.state == AP_CONN_STATE_CIRCUIT_WAIT);
|
||||||
is_resolve = conn->socks_request->command == SOCKS_COMMAND_RESOLVE;
|
is_resolve = (conn->socks_request->command == SOCKS_COMMAND_RESOLVE ||
|
||||||
|
conn->socks_request->command == SOCKS_COMMAND_RESOLVE_PTR);
|
||||||
|
|
||||||
need_uptime = smartlist_string_num_isin(get_options()->LongLivedPorts,
|
need_uptime = smartlist_string_num_isin(get_options()->LongLivedPorts,
|
||||||
conn->socks_request->port);
|
conn->socks_request->port);
|
||||||
|
@ -1120,7 +1120,7 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (socks->command == SOCKS_COMMAND_RESOLVE) { // resolve_ptr XXXX NM
|
if (socks->command == SOCKS_COMMAND_RESOLVE) {
|
||||||
uint32_t answer;
|
uint32_t answer;
|
||||||
struct in_addr in;
|
struct in_addr in;
|
||||||
/* Reply to resolves immediately if we can. */
|
/* Reply to resolves immediately if we can. */
|
||||||
@ -1141,7 +1141,7 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
rep_hist_note_used_resolve(time(NULL)); /* help predict this next time */
|
rep_hist_note_used_resolve(time(NULL)); /* help predict this next time */
|
||||||
} else { /* socks->command == SOCKS_COMMAND_CONNECT */
|
} else if (socks->command == SOCKS_COMMAND_CONNECT) {
|
||||||
if (socks->port == 0) {
|
if (socks->port == 0) {
|
||||||
log_notice(LD_APP,"Application asked to connect to port 0. Refusing.");
|
log_notice(LD_APP,"Application asked to connect to port 0. Refusing.");
|
||||||
connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
|
connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
|
||||||
@ -1166,6 +1166,12 @@ connection_ap_handshake_rewrite_and_attach(edge_connection_t *conn,
|
|||||||
|
|
||||||
/* help predict this next time */
|
/* help predict this next time */
|
||||||
rep_hist_note_used_port(socks->port, time(NULL));
|
rep_hist_note_used_port(socks->port, time(NULL));
|
||||||
|
} else if (socks->command == SOCKS_COMMAND_RESOLVE_PTR) {
|
||||||
|
// XXXX NM Do anything here?
|
||||||
|
|
||||||
|
rep_hist_note_used_resolve(time(NULL)); /* help predict this next time */
|
||||||
|
} else {
|
||||||
|
tor_fragile_assert();
|
||||||
}
|
}
|
||||||
conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT;
|
conn->_base.state = AP_CONN_STATE_CIRCUIT_WAIT;
|
||||||
if ((circ &&
|
if ((circ &&
|
||||||
@ -1701,10 +1707,10 @@ connection_ap_handshake_socks_resolved(edge_connection_t *conn,
|
|||||||
buf[1] = SOCKS5_SUCCEEDED;
|
buf[1] = SOCKS5_SUCCEEDED;
|
||||||
buf[2] = 0; /* reserved */
|
buf[2] = 0; /* reserved */
|
||||||
buf[3] = 0x03; /* Domainname address type */
|
buf[3] = 0x03; /* Domainname address type */
|
||||||
memcpy(buf+4, answer, answer_len); /* address */
|
buf[4] = (char)answer_len;
|
||||||
buf[4+answer_len] = '\0';
|
memcpy(buf+5, answer, answer_len); /* address */
|
||||||
set_uint16(buf+4+answer_len+1, 0); /* port == 0. */
|
set_uint16(buf+5+answer_len, 0); /* port == 0. */
|
||||||
replylen = 4+answer_len+1+2;
|
replylen = 5+answer_len+2;
|
||||||
} else {
|
} else {
|
||||||
buf[1] = SOCKS5_HOST_UNREACHABLE;
|
buf[1] = SOCKS5_HOST_UNREACHABLE;
|
||||||
memset(buf+2, 0, 8);
|
memset(buf+2, 0, 8);
|
||||||
|
@ -1435,7 +1435,8 @@ handle_getinfo_helper(const char *question, char **answer)
|
|||||||
case AP_CONN_STATE_CONTROLLER_WAIT:
|
case AP_CONN_STATE_CONTROLLER_WAIT:
|
||||||
case AP_CONN_STATE_CIRCUIT_WAIT:
|
case AP_CONN_STATE_CIRCUIT_WAIT:
|
||||||
if (conn->socks_request &&
|
if (conn->socks_request &&
|
||||||
conn->socks_request->command == SOCKS_COMMAND_RESOLVE)
|
(conn->socks_request->command == SOCKS_COMMAND_RESOLVE ||
|
||||||
|
conn->socks_request->command == SOCKS_COMMAND_RESOLVE_PTR))
|
||||||
state = "NEWRESOLVE";
|
state = "NEWRESOLVE";
|
||||||
else
|
else
|
||||||
state = "NEW";
|
state = "NEW";
|
||||||
|
@ -865,7 +865,8 @@ connection_edge_process_relay_cell_not_open(
|
|||||||
"Dropping.");
|
"Dropping.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
tor_assert(conn->socks_request->command == SOCKS_COMMAND_RESOLVE);
|
tor_assert(conn->socks_request->command == SOCKS_COMMAND_RESOLVE ||
|
||||||
|
conn->socks_request->command == SOCKS_COMMAND_RESOLVE_PTR);
|
||||||
answer_len = cell->payload[RELAY_HEADER_SIZE+1];
|
answer_len = cell->payload[RELAY_HEADER_SIZE+1];
|
||||||
if (rh->length < 2 || answer_len+2>rh->length) {
|
if (rh->length < 2 || answer_len+2>rh->length) {
|
||||||
log_warn(LD_PROTOCOL, "Dropping malformed 'resolved' cell");
|
log_warn(LD_PROTOCOL, "Dropping malformed 'resolved' cell");
|
||||||
|
Loading…
Reference in New Issue
Block a user