socat 端口转发设置及使用整理

2012年5月31日 | 分类: 乱七八糟 | 标签: , ,

背景:在服务器上面需要设置端口转发,当然使用nc也可以做到,但是发现socat更加方便而且,听说更牛,实际两个对比我是没有搞懂。主要是看那个方便使用。在网络上找来几篇文章,然后整理出来给大家参考。我对这个软件运用比较少,有问题可以互相交流。

*

【正文开始】

文章类型:网络收集整理,半原创 :)

适合人群:通过socat端口转发,设置NAT转发双向流,寻找比NC更强大的人

知识背景:基本软件安装,网络端口相关知识有一定的了解

*

0、基本介绍

socat是一個netcat(nc)的替代產品,可以稱得上nc++。socat的特點就是在兩個流之間建立一個雙向的 通道。socat的地址類型很 多,有ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,,其实发现socat的参数也是很有规律、简洁的。
socat 可以在任意的两个(广义的)管道(socket,标准输入输出流,管道等)之间建立一个通道,在该通道中交换两端的数据。

 

1、安装方法

Debian\Ubuntu : sudo apt-get install socat

CentOS\Redhat:yum install socat

其他的Linux: 点击这个 下载链接 下载源码编译吧。

 

2、使用方法

例如,我需要的转发功能是:
对于所有15000端口的TCP访问,一律转发到 server.wesnoth.org:15000 上。
于是,对应的命令就是:

socat -d -d -lf /var/log/socat.log TCP4-LISTEN:15000,reuseaddr,fork,su=nobody TCP4:server.wesnoth.org:15000
“-d -d -lf /var/log/socat.log”是参数,前面两个连续的-d -d代表调试信息的输出级别,-lf则指定输出信息的保存文件。
“TCP4-LISTEN:15000,reuseaddr,fork,su=nobody”是一号地址,代表在15000端口上进行TCP4协议的监听,复用绑定的IP,每次又连接到来就fork复制一个进程进行处理,同时将执行用户设置为nobody用户。
“TCP4:server.wesnoth.org:15000″是二号地址,代表将socat监听到的任何请求,转发到server.wesnoth.org:15000上去。

下面的例子需要认真去理解里面表达的意思,假设要转发端口就要先在本地打开一个端口,然后再监听提供给外部连接的端口。

$socat – tcp:192.168.1.18:80

這個命令等同於 nc 192.168.1.18 80。 socat裡面,必須有兩個流,所以第一個參數-代表標準的輸入輸出,第二個流連接到192.168.1.18的80端口。再看一個反向telnet的例子:

on server:
$socat tcp-listen:23 exec:cmd,pty,stderr

這個命名把cmd綁定到端口23,同時把cmd的Stderr重定向到stdout。

on client:
$socat readline tcp:server:23

連接到服務器的23端口,即可獲得一個cmd shell。readline是gnu的命令行編輯器,具有歷史功能。

再看文件傳遞的例子。nc也經常用來傳遞文件,但是nc有一個缺點,就是不知道文件什麼時候傳完了,一般要用Ctrl+c來終止,或者估計一個時間,用-w參數來讓他自動終止。用socat就不用這麼麻煩了:

on host 1:
$socat -u open:myfile.exe,binary tcp-listen:999

on host 2:
$socat -u tcp:host1:999 open:myfile.exe,create,binary

這個命令把文件myfile.exe用二進制的方式,從host 1 傳到host 2。-u 表示數據單向流動,從第一個參數到第二個參數,-U表示從第二個到第一個。文件傳完了,自動退出。

再來一個大家喜歡用的例子。在一個NAT環境,如何從外部連接到內部的一個端口呢?只要能夠在內部運行socat就可以了。

外部:
$socat tcp-listen:1234 tcp-listen:3389

內部:
$socat tcp:outerhost:1234 tcp:192.168.12.34:3389

這樣,你外部機器上的3389就影射在內部網192.168.12.34的3389端口上。

 

3、参考资料

《 使用socat进行端口转发》

Port Forwarding in user space [INFO]》

How to forward port in user space using socat

*

原文http://www.issacy.com/archives/807.html

  1. @twfcc
    2012年5月31日20:30

    有用,socat沒用過,nc可以開臨時服務器,傳文件,掃描端口,用途很多的,這個socat看來更強

  2. GUP
    2012年5月31日18:31

    有什么作用