0%

cloudflare | CF 之后 TCP + socket 还能通信吗

先说结论,如果是免费版本 CF,那么,TCP + socket 是不能代理通信的。

因为免费版本只是接管了 http 层,把 TCP 层给禁掉了。但是,注意上面的话,是代理不能通信。

这里说一下如何在 CF 接管域名的情况下,进行 TCP + socket 通信

先弄一下脚本吧,就是 server 跑一个 tcp + socket 的服务,然后本地进行连接,如果,有输出,就说明调用成功。

测试是使用 15000 端口,在使用前,需要打开安全组和防火墙。

server.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import socket

# 定义主机和端口
HOST = '0.0.0.0' # 使用回环地址,也可以是服务器的公共 IP 地址
PORT = 15000 # 端口号,可以自定义一个未被占用的端口号

# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定主机和端口
server_socket.bind((HOST, PORT))

# 开始监听,允许最多一个连接请求
server_socket.listen(1)
print(f"Server is listening on {HOST}:{PORT}...")

# 等待客户端连接
client_socket, client_address = server_socket.accept()
print(f"Connected by {client_address}")

# 接收数据并回显
while True:
data = client_socket.recv(1024) # 接收数据,最多 1024 字节
if not data:
break
print(f"Received from client: {data.decode()}")
client_socket.sendall(data) # 将接收到的数据返回给客户端

# 关闭连接
client_socket.close()
server_socket.close()

client.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 客户端代码 client.py
import socket

# 定义服务端的主机和端口
# HOST = '根域名' # 使用回环地址,也可以是服务器的公共 IP 地址
# HOST = '子域名' # 使用回环地址,也可以是服务器的公共 IP 地址
# HOST = 'ip' # 使用回环地址,也可以是服务器的公共 IP 地址
PORT = 15000 # 与服务端相同的端口号

# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务端
client_socket.connect((HOST, PORT))
print(f"Connected to server at {HOST}:{PORT}")

# 发送数据
message = "Hello, server!"
client_socket.sendall(message.encode())

# 接收数据
data = client_socket.recv(1024) # 接收数据,最多 1024 字节
print(f"Received from server: {data.decode()}")

# 关闭连接
client_socket.close()

DNS 直连

如果,子域名不走代理,而是走 DNS 直连,那么,tcp + socket 是可以连通的。

但是,别人可以进行抓包,抓到这个 IP,会导致 CF 防护形同虚设。

其他域名

就是将 CF 接管的域名放弃,不用来连接 tcp 层通信,重新买一个域名。

这个域名可以直连,也可以用反向代理。

Spectrum

这个只有 CF 付费版本才会带有这个功能。

但是,很不幸,CF 有三种付费模式。

  • Pro
  • Business
  • Enterprise

其中只有 Enterprise 才具备任意 TCP/UDP 端口连接。而 Pro 只支持 ssh22 和 我的世界的 22535Business 只比 Pro 多了一个 RDP「远程桌面连接」。

请我喝杯咖啡吧~