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

#echo serverpython

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的實現.ubuntu

因爲有--lua-exec這個選項, 我一開始是直接寫lua腳本的, 從源代碼提供的demo腳本看看,lua腳本直接從stdin stdout讀寫就能夠了,我覺得是ncat重寫了lua的print ,io等模塊(函數), 看了代碼以後才發現機制是如上所述.app

ncat帶的lua是5.2版本, 沒有pack unpack之類的函數(lua 5.3引入),可是python中是有struct這個模塊,提供pack, unpack, 方便處理二進制數據.socket

相關文章
相關標籤/搜索