nmap.org的21世纪的netcat(ncat)

耗尽温柔 提交于 2020-03-09 22:03:07

#echo server

zhou@ubuntu:~$ cat test.py 
#!/usr/bin/env python
import sys
while True:
    s = sys.stdin.read(1)
    if s:
        sys.stdout.write(s)
        sys.stdout.flush()
nc -l -k --sh-exec 'python test.py'  127.0.0.1 8086   
zhou@ubuntu:~$ nc 127.0.0.1 8086
123
123
1444455
1444455

nmap.org的ncat支持--sh-exec和--lua-exec参数, 提供了这两个参数后, ncat会在appcet(-l)或connet后fork一个子进程,前者通过exec /bin/sh -c 来执行sh命令, 后者直接执行lua脚本. 同时,会生成两个pipe组, 将子进程的stdin和stdout分别重定向到两个pipe. ncat主进程在从socket收到数据后,会将数据发送到pipe中,由于子进程的stdin已经被重定向, 所以子进程中从stdin读相当于从pipe读,而pipe的数据就是socket过来的数据. 利用这个特性,我们就可以随意发挥了. 这将大大方便基于socket的服务的测试打桩. 以上就是简单的echo server的实现.

由于有--lua-exec这个选项, 我一开始是直接写lua脚本的, 从源代码提供的demo脚本看看,lua脚本直接从stdin stdout读写就可以了,我以为是ncat重写了lua的print ,io等模块(函数), 看了代码之后才发现机制是如上所述.

ncat带的lua是5.2版本, 没有pack unpack之类的函数(lua 5.3引入),但是python中是有struct这个模块,提供pack, unpack, 方便处理二进制数据.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!