大佬们有用过 netcat 吗,求个转义的解决办法

2019-08-08 11:15:18 +08:00
 CurChen

使用 golang 的 exec.Command()时,发现它把我的参数都改成了 string 类型,其中的重定向符号 > 在执行过程中被改成了">"

希望执行的命令:nc "127.0.0.1" "8888" > "F:\newImage\android_data.dd"

实际执行的命令:nc "127.0.0.1" "8888" ">" "F:\newImage\android_data.dd"

所以想能不能用转义解决这个问题,可是网上找了很久都没找到,类似 & g t 转义成 > 这样的功能

希望大佬们支支招,在此不胜感激

1759 次点击
所在节点    程序员
7 条回复
lcdtyph
2019-08-08 11:24:20 +08:00
>本来就是保留字符啊,表示重定向的时候不需要转义

你用的什么 shell ? cmd 还是 ps
CurChen
2019-08-08 11:26:30 +08:00
@lcdtyph 用的是 cmd
加引号会报错:invalid port >: NO_DATA
不加引号就能执行成功
fatttt
2019-08-08 11:31:07 +08:00
创建 Command 的时候,制定 cmd 的输出成 "F:\newImage\android_data.dd" 文件的 fd.
另外,我觉得你这个用 cmd 太奇怪了.完全可以用 go 来实现你那个 nc 的功能:
conn=net.Dial("tcp","127.0.0.1:8888")
fd=os.Create("F:\newImage\android_data.dd")
io.Copy(fd,conn)
代码大概是这样
lcdtyph
2019-08-08 11:35:14 +08:00
好吧我才理解 lz 的意思…
感觉你需要的是
cmd /c nc a.b.c.d port > xxx
(没有 win 环境没法测试
CurChen
2019-08-08 14:12:49 +08:00
@lcdtyph cmd /c 是可以的 感谢你的帮助
CurChen
2019-08-08 14:19:24 +08:00
@fatttt 感谢你提供的方法,不过因为是用 adb forward 进行端口转发的,然后手机作为服务端用 dd 与 nc 命令发送数据到 PC,在 pc 端不用 nc 命令的话 获取文件就比较复杂了
ysc3839
2019-08-08 16:17:12 +08:00
">" 重定向是 shell 的功能,你要确认的是 exec.Command() 会不会启动 shell 来执行。
从你给出的结果来看是不会的,那就得手动执行 shell。
比如 bash -c "command"
cmd /c "command"

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/590075

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX