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

#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, 方便处理二进制数据.

转载于:https://my.oschina.net/dknlnl/blog/526725

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值