我想知道,是否可以通过 websockets 协议传输/隧道 TCP 连接?
有一个websockets 包,似乎我可以将 TCP 连接 io.copy 复制到 websockets 连接中,但我不知道如何在另一端将其重新组装为 TCPConn。
例如,我想在一端创建一个 socks5 ServerN(在 NAT 后面),在另一端创建一个 ServerIE。互联网用户会向 ServerIE 发出socks5 请求(通过socks5 协议),ServerIE 会通过websocket 连接将socks5 请求发送到ServerNAT。ServerNAT 然后将处理socks5 请求(即它是socks5 服务器)。
编辑:
我写了一些代码,但不幸的是它在从 TCP 连接读取到 WS 时卡住了。运行它:go run main.go -logtostderr
package main
import (
"flag"
log "github.com/golang/glog"
"golang.org/x/net/websocket"
"bufio"
"net"
"net/http"
"time"
// "io"
)
func main() {
flag.Parse()
defer log.Flush()
log.Infof("wsServer()")
wsCh := wsServer()
log.Infof("wsNAT()")
natWS, err := wsNAT()
if err != nil {
log.Error(err)
return
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 SOCKS5 代理连接到 Web 服务。目前,我的app.config如下:
<system.net>
<defaultProxy enabled="true" >
<proxy proxyaddress="http://xxx.xxx.xxx.xxx:yyyy" bypassonlocal="True" />
</defaultProxy>
</system.net>
Run Code Online (Sandbox Code Playgroud)
这对于 http 代理来说效果很好,但它只是不能连接到 SOCKS5 代理。我在谷歌上广泛搜索答案,但找不到解决这个问题的人,尽管我已经发现这个问题好几次了。有人知道我该怎么做吗?
我正在尝试使用 Charles Proxy 来调试 iPhone 上的一些性能问题。我使用“http 代理模式”完成了所有工作,但使用“socks 代理模式”失败。由于 iOS 在 http 代理下表现出与现实生活中不同的行为(请参阅http://www.charlesproxy.com/documentation/configuration/proxy-settings/),我真的很想让袜子代理工作。
在我的 iPhone 上配置了 socks 代理后,我无法连接到任何站点,并且在运行 Charles 的机器上嗅探表明,每当我尝试连接时,我都会重置。我错过了什么步骤?
关于如何使其在 Mac 或 Windows 上工作的解释将不胜感激!
我目前正在使用TOR进行一些测试工作并遇到了一个小问题.Tor的客户端仅支持通过SOCKS5协议接收连接,但我使用的应用程序仅支持HTTP Proxy Protocals.
是不是可以把东西放在中间?所以它就这样了.
我的程序(仅限HTTP)> HTTP到SOCKS转换器> Tor SOCKS5服务器
谷歌搜索了相当多的信息,我找到了SOCKS到HTTP的信息,但不是相反.任何帮助表示赞赏,谢谢!
我正在尝试使用XMPPFramework和OpenFire通过iOS上的XMPP进行文件传输.我的代码基础来自以下教程.我有一个成功的TurnSocket(XEP-0065:SOCKS5 Bytestreams)连接,但我无法工作如何使用它来发送数据.我有两个注意事项,我都坚持这两个:1.调用[socket writeData]和2.使用'XEP-0096:SI文件传输'.
可能的解决方案1 - 调用[socket writeData] 在我的App委托中,我有一个didSucceed方法.我可以像这样调用[socket writeData] ...
- (void)turnSocket:(TURNSocket *)sender didSucceed:(GCDAsyncSocket *)socket {
NSLog(@"TURN Connection succeeded!");
[socket writeData:myData withTimeout:60.0f tag:0];
[turnSockets removeObject:sender];
}
Run Code Online (Sandbox Code Playgroud)
6月14日更新:这是正确的吗?如果是这样,其他用户如何读取数据?我试过实施
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
Run Code Online (Sandbox Code Playgroud)
但它永远不会被召唤.我如何确保它被调用?
可能的解决方案2 - XEP-0096:SI文件传输 我是否需要使用XEP-0096:SI文件传输?如果是这样,我如何在我需要形成的XEP-0096 XML中使用我的成功连接?在XEP-0096文档意味着有一个"哈希"属性,但我不知道该从何而来.
例如
<iq type='set' id='offer1' to='receiver@jabber.org/resource'>
<si xmlns='http://jabber.org/protocol/si'
id='a0'
mime-type='text/plain'
profile='http://jabber.org/protocol/si/profile/file-transfer'>
<file xmlns='http://jabber.org/protocol/si/profile/file-transfer'
name='test.txt'
size='1022'
hash='552da749930852c69ae5d2141d3766b1'
date='1969-07-21T02:56:15Z'>
<desc>This is a test. If this were a real file...</desc>
</file>
<feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='form'>
<field var='stream-method' type='list-single'> …Run Code Online (Sandbox Code Playgroud) 是否可以使用任何SOCKS客户端lib在Python中通过SOCKS5代理发送UDP数据报?SocksiPy似乎没有用,或者我只是错误地使用它.以下代码不起作用,它尝试直接连接到目标:
s = socks.socksocket ( socket.AF_INET, socket.SOCK_DGRAM )
s.setproxy(socks.PROXY_TYPE_SOCKS5,"socks.proxy.lan")
s.sendto ( payload, ( ip, port ) )
Run Code Online (Sandbox Code Playgroud)
如果我更改SOCK_DGRAM为SOCK_STREAM代码也不起作用,它不会尝试连接任何地方.
下面的代码有什么问题?我使用AsyncSocket连接到SOCKS代理并在onSocketWillConnect委托方法上设置代理设置.如果我省略了调用CFReadStreamSetProperty和CFWriteStreamSetProperty插座式连接器能够顺利跟进.另外,我在一个没有可跟踪堆栈跟踪的解除分配的实例上得到[Not A Type retain](它可能与CFNetwork有关?).有谁知道是什么给出的?
CFDictionaryRef proxyDict = CFNetworkCopySystemProxySettings();
CFMutableDictionaryRef socksConfig = CFDictionaryCreateMutableCopy(NULL, 0, proxyDict);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyHost, CFSTR("192.168.1.148"));
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSProxyPort, (__bridge CFNumberRef)[NSNumber numberWithInt:3129]);
CFDictionarySetValue(socksConfig, kCFStreamPropertySOCKSVersion, kCFStreamSocketSOCKSVersion4);
// set SOCKS for read streams
CFReadStreamRef readStream = [sock getCFReadStream];
if (!CFReadStreamSetProperty(readStream, kCFStreamPropertySOCKSProxy, socksConfig)) {
CFStreamError error = CFReadStreamGetError(readStream);
NSLog(@"[SEVERE] Web Socket Read Stream Error: %ld[%ld]", error.domain, error.error);
}
// set SOCKS for write stream
CFWriteStreamRef writeStream = [sock getCFWriteStream];
if (!CFWriteStreamSetProperty(writeStream, kCFStreamPropertySOCKSProxy, socksConfig)) {
CFStreamError error = …Run Code Online (Sandbox Code Playgroud) 总而言之,希望通过SOCKS5服务器中继UDP数据包的客户端必须至少:
UDP ASSOCIATE请求(参见第4节);以下是第6节中的一些相关引文:
当UDP ASSOCIATE请求到达的TCP连接终止时,UDP关联终止.
在对UDP ASSOCIATE请求的回复中,BND.PORT和BND.ADDR字段指示客户端必须发送要中继的UDP请求消息的端口号/地址.
和第7:
基于UDP的客户端必须在回复UDP ASSOCIATE请求时将其数据报发送到由BND.PORT指示的UDP端口的UDP中继服务器.
为什么这么复杂?为什么不在预先存在的TCP连接中发送UDP数据包?
编辑:为了澄清,我期望SOCKS代理通过TCP流接收UDP数据包,然后使用实际的UDP将它们传输到目标.然后从目标接收UDP数据包并将其发送回TCP流.
这是一些背景.
我的目标是实现反向网络共享,以便Android设备可以使用其插入的计算机的Internet连接,而无需在设备和计算机上进行root访问(SimpleRT可以工作,但需要在计算机上进行root访问).
我的第一个想法是ssh -D在计算机上启动一个简单的SOCKS5服务器,这样我只需要实现客户端.adb由于... 提供的远程端口转发,数据包将从设备传输到计算机adb reverse.
不幸的是,OpenSSH SOCKS服务器不支持UDP.但这只是实施的限制,我本可以使用另一个SOCKS服务器.
但是,adb reverse也不支持UDP转发.
因此我的问题关于SOCKS5协议.
我目前正在编写一个PoC,它通过TCP实现我自己的(简单)协议,它能够中继UDP数据包,但我很失望不能使用标准协议(并从现有实现中获益).
我可以使用以下代码设置http代理:
public class CustomFlurlHttpClient : DefaultHttpClientFactory {
public override HttpClient CreateClient(Url url, HttpMessageHandler m) {
return base.CreateClient(url, CreateProxyHttpClientHandler("http://192.168.0.103:9090"));
}
private HttpClientHandler CreateProxyHttpClientHandler(string proxyUrl, string user = "", string passw = "") {
NetworkCredential proxyCreds = null;
var proxyUri = new Uri(proxyUrl);
proxyCreds = new NetworkCredential (user, passw);
var proxy = new WebProxy (proxyUri, false) {
UseDefaultCredentials = false,
Credentials = proxyCreds
};
var clientHandler = new HttpClientHandler {
UseProxy = true,
Proxy = proxy,
PreAuthenticate = true,
UseDefaultCredentials = false …Run Code Online (Sandbox Code Playgroud) 我有一个在 AWS 上运行的 Kafka 集群。我想从我的应用程序服务器使用标准的kafka-console-consumer连接到集群。应用服务器可以通过 SOCKS-Proxy 访问互联网。无需身份验证
如何告诉 Kafka 客户端通过代理连接?
我尝试了很多方法,包括将标准的 JVM 代理参数添加到kaka-run-class.sh脚本中。但我仍然收到连接拒绝错误。
exec $JAVA -DsocksProxyHost=proxy.host.name -DsocksProxyPort=1080 $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@"
Run Code Online (Sandbox Code Playgroud)
编辑: 事实证明,Kafka 使用 java.nio 库。它的套接字实现与代理不兼容。所以我用的jvm参数对Kafka客户端没有影响。
socks ×10
proxy ×5
c# ×2
tcp ×2
.net ×1
apache-kafka ×1
asyncsocket ×1
cfnetwork ×1
cfstream ×1
flurl ×1
go ×1
http ×1
ios ×1
iphone ×1
java ×1
jvm ×1
networking ×1
objective-c ×1
python ×1
rfc ×1
tor ×1
udp ×1
web-services ×1
websocket ×1
xmpp ×1