|
|
@ -78,13 +78,17 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn in
|
|
|
|
Address: d.address,
|
|
|
|
Address: d.address,
|
|
|
|
Port: d.port,
|
|
|
|
Port: d.port,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
destinationOverridden := false
|
|
|
|
if d.config.FollowRedirect {
|
|
|
|
if d.config.FollowRedirect {
|
|
|
|
if outbound := session.OutboundFromContext(ctx); outbound != nil && outbound.Target.IsValid() {
|
|
|
|
if outbound := session.OutboundFromContext(ctx); outbound != nil && outbound.Target.IsValid() {
|
|
|
|
dest = outbound.Target
|
|
|
|
dest = outbound.Target
|
|
|
|
|
|
|
|
destinationOverridden = true
|
|
|
|
} else if handshake, ok := conn.(hasHandshakeAddress); ok {
|
|
|
|
} else if handshake, ok := conn.(hasHandshakeAddress); ok {
|
|
|
|
addr := handshake.HandshakeAddress()
|
|
|
|
addr := handshake.HandshakeAddress()
|
|
|
|
if addr != nil {
|
|
|
|
if addr != nil {
|
|
|
|
dest.Address = addr
|
|
|
|
dest.Address = addr
|
|
|
|
|
|
|
|
destinationOverridden = true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -121,7 +125,7 @@ func (d *DokodemoDoor) Process(ctx context.Context, network net.Network, conn in
|
|
|
|
writer = buf.NewWriter(conn)
|
|
|
|
writer = buf.NewWriter(conn)
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
//if we are in TPROXY mode, use linux's udp forging functionality
|
|
|
|
//if we are in TPROXY mode, use linux's udp forging functionality
|
|
|
|
if !d.config.FollowRedirect {
|
|
|
|
if !destinationOverridden {
|
|
|
|
writer = &buf.SequentialWriter{Writer: conn}
|
|
|
|
writer = &buf.SequentialWriter{Writer: conn}
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
sockopt := &internet.SocketConfig{
|
|
|
|
sockopt := &internet.SocketConfig{
|
|
|
|