deepseek V3 的代码能力是行业 top1 吗?
作者:卡卷网发布时间:2025-01-14 20:20浏览数量:74次评论数量:0次
就用这个例子测试:
提示词很简单:
用golang实现一个鲁棒的基于SSH tunnel的SOCKS5代理客户端,类似ssh -D 1080 user@192.168.0.103的功能
DeepSeek V3 生成代码,没有多余的提示,V2.5版本还是需要多交流几次的。
的确是要比V2.5进步一点的,V2.5看我之前的文章Void Echo:测试AI编程能力一个例子 ,中间交互比V3的多。
package main
import (
"bytes"
"fmt"
"io"
"log"
"net"
"os"
"sync"
"golang.org/x/crypto/ssh"
)
var (
sshClient *ssh.Client
sshConfig *ssh.ClientConfig
)
func main() {
if len(os.Args) != 4 {
fmt.Println("Usage: ./socks5-proxy <user> <host:port> <local-socks5-port>")
return
}
user := os.Args[1]
host := os.Args[2]
localPort := os.Args[3]
// SSH配置
sshConfig = &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.PasswordCallback(func() (string, error) {
fmt.Print("Enter SSH password: ")
var password string
fmt.Scanln(&password)
return password, nil
}),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
// 连接到SSH服务器
var err error
sshClient, err = ssh.Dial("tcp", host, sshConfig)
if err != nil {
log.Fatalf("Failed to dial: %s", err)
}
defer sshClient.Close()
// 启动本地SOCKS5代理服务器
listener, err := net.Listen("tcp", ":"+localPort)
if err != nil {
log.Fatalf("Failed to listen on local port: %s", err)
}
defer listener.Close()
log.Printf("SOCKS5 proxy server started on :%s\n", localPort)
for {
conn, err := listener.Accept()
if err != nil {
log.Printf("Failed to accept connection: %s", err)
continue
}
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
// 读取SOCKS5握手请求
buf := make([]byte, 256)
n, err := conn.Read(buf)
if err != nil {
log.Printf("Failed to read SOCKS5 handshake: %s", err)
return
}
// 检查SOCKS5版本
if buf[0] != 0x05 {
log.Printf("Unsupported SOCKS version: %d", buf[0])
return
}
// 响应SOCKS5握手
conn.Write([]byte{0x05, 0x00})
// 读取SOCKS5请求
n, err = conn.Read(buf)
if err != nil {
log.Printf("Failed to read SOCKS5 request: %s", err)
return
}
// 解析SOCKS5请求
if buf[1] != 0x01 {
log.Printf("Unsupported command: %d", buf[1])
return
}
addrType := buf[3]
var host string
switch addrType {
case 0x01: // IPv4
host = net.IPv4(buf[4], buf[5], buf[6], buf[7]).String()
case 0x03: // Domain name
host = string(buf[5 : 5+int(buf[4])])
case 0x04: // IPv6
host = net.IP(buf[4:20]).String()
default:
log.Printf("Unsupported address type: %d", addrType)
return
}
port := int(buf[n-2])<<8 | int(buf[n-1])
// 通过SSH隧道连接到目标主机
remoteConn, err := sshClient.Dial("tcp", fmt.Sprintf("%s:%d", host, port))
if err != nil {
log.Printf("Failed to dial remote host: %s", err)
return
}
defer remoteConn.Close()
// 响应SOCKS5连接成功
conn.Write([]byte{0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})
// 开始转发数据
var wg sync.WaitGroup
wg.Add(2)
go func() {
io.Copy(remoteConn, conn)
wg.Done()
}()
go func() {
io.Copy(conn, remoteConn)
wg.Done()
}()
wg.Wait()
}
有一个语法报错
手动删除掉 bytes的import 之后再运行
直接可以运行,小BUG 是输入密码是明文,继续设置chrome代理
切换后代理后打开页面,直接就是可用的,你可以去测试其他的大模型,包括国外的,能生成可以使用代码的他就排第二,你还要看看和他交互多少次。
补充:
刚测了kimi,改地址端口用户名,密码之类,手动修了语法错 "io"引用一下,可以执行,但是代理配置生效后,不能用。kimi生成的代码看起来有模有样,好像要实现socks5协议了,可惜不对啊。
package main
import (
"log"
"net"
"golang.org/x/crypto/ssh"
)
func main() {
// SSH 服务器的地址和端口
sshAddr := "192.168.0.103:22"
// SSH 用户名和密码
user := "user"
password := "password"
// 本地 SOCKS5 代理服务器的地址和端口
socksAddr := "127.0.0.1:1080"
// 创建 SSH 客户端配置
config := &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
// 连接到 SSH 服务器
sshConn, err := ssh.Dial("tcp", sshAddr, config)
if err != nil {
log.Fatalf("Failed to dial: %s", err)
}
defer sshConn.Close()
// 监听本地 SOCKS5 代理端口
listener, err := net.Listen("tcp", socksAddr)
if err != nil {
log.Fatalf("Failed to listen: %s", err)
}
defer listener.Close()
log.Printf("SOCKS5 proxy listening on %s", socksAddr)
for {
// 接受来自本地客户端的连接
localConn, err := listener.Accept()
if err != nil {
log.Printf("Failed to accept: %s", err)
continue
}
go handleConnection(sshConn, localConn)
}
}
func handleConnection(sshConn *ssh.Client, localConn net.Conn) {
defer localConn.Close()
// 创建 SSH 隧道
remoteConn, err := sshConn.Dial("tcp", "127.0.0.1:0")
if err != nil {
log.Printf("Failed to dial remote: %s", err)
return
}
defer remoteConn.Close()
// 构建 SOCKS5 响应消息,表示连接成功
socksResp := []byte{0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
if _, err := localConn.Write(socksResp); err != nil {
log.Printf("Failed to write SOCKS5 response: %s", err)
return
}
// 在本地连接和远程连接之间进行数据转发
go func() {
if _, err := io.Copy(localConn, remoteConn); err != nil {
log.Printf("Failed to copy from remote to local: %s", err)
}
}()
if _, err := io.Copy(remoteConn, localConn); err != nil {
log.Printf("Failed to copy from local to remote: %s", err)
}
}
免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
- 上一篇:那些编程水平很高的程序员是怎么训练出来的?
- 下一篇:哪些知名软件是Java写的?
相关推荐

你 发表评论:
欢迎