• Linux下的UDP/TCP端口映射(netcat and socat) IT技术的杂草园 51CTO技术博客


    Linux下的UDP/TCP端口映射(netcat and socat) - IT技术的杂草园 - 51CTO技术博客

    Linux下的UDP/TCP端口映射(netcat and socat)
    2010-02-01 11:37:19
    原文链接: http://www.wenquan.name/?p=1158
    说起来有点土,事到如今才第一次用socat.
    不过今天看了一眼,netcat(nc)这东西ms已经N年没有人维护了.最先有个叫nc110的东西,由于太普及, 以至于人们都不想再去改动它的功能.结果导致多年来没有任何进步…现任的RHEL5里面好像也是由nc110改出来的.另外分支出来一个netcat,这个在google上直接netcat最容易出来,但也好多年没有人动过了…由于这些情况,才使得socat应运而生.虽然它已经生了好多年了,不过我才认识…
    用socat试几个netcat常用的用法,对比如下:
    1. 听tcp 12345端口
    # nc -l 127.0.0.1 12345
    # socat tcp-listen:12345 -
    2. 向远处tcp 12345端口发点字
    # echo “test” | nc 127.0.0.1 12345
    # echo “test” | socat - tcp-connect:127.0.0.1:12345
    3. 听udp 23456端口
    # nc -u -l 127.0.0.1 23456
    # socat udp-listen:23456 -
    4. 向远处udp 23456端口发点字
    # echo “test” | nc -u 127.0.0.1 23456
    # echo “test” | socat - udp-connect:127.0.0.1:23456
    5. 听unix socket /tmp/unix.socket
    # nc -U -l /tmp/unix.socket
    netcat没有-U选项
    # socat unix-listen:/tmp/unix.socket -
    6. 向本地unix socket /tmp/unix.socket发点字
    # echo “test” | nc -U /tmp/unix.socket
    netcat没有-U选项
    # echo “test” | socat - unix-connect:/tmp/unix.sock
    7. 听本地unix datagram socket /tmp/unix.dg.sock
    nc110搞不定,netcat也搞不定
    # socat unix-recvfrom:/tmp/unix.dg.sock -
    8. 向本地unix datagram socket /dev/log发点字
    nc110搞不定,netcat也搞不定
    # echo “test” | socat - unix-sendto:/tmp/unix.dg.sock
    ----------第二篇放一起了-------

    linux下实现UDP端口映射

    原文链接: http://www.hiadmin.com/?tag=socat

    一、实际问题
    snmp监听端口默认为UPD 161,当监控服务器无法直接访问时,就需要用到端口映射来解决!
    同样问题还有dns服务器的UPD 53端口。
    二、使用nc来映射UPD端口
    假设被监控服务器的IP为192.168.1.1;用于端口映射的主机为某个公网IP如59.1.1.1;需要映射的端口为UDP 161转发端口设为1161(自定义建议1024以上端口)
    在端口映射服务器上操作,要安装nc,一般系统都会安装;
    【注:nc存在安全漏洞,一定要设定防火墙】
    首先使用mkfifo建立管道文件
    #mkfifo /tmp/snmpfifo
    通过nc建立端口映射 -l为监听模式 -u为UDP -p为本地端口;将内网监控161端口映射到本地的1161端口上;
    #nc -l -u -p 1161 < /tmp/snmpfifo | nc -u 192.168.1.1 161 > /tmp/snmpfifo
    查看netstat 1161是否监听
    #netstat -nlp |grep :1161
    udp     0      0 0.0.0.0:1161       0.0.0.0:*          31472/nc

    在监控服务器上进行测试是否能采集到数据:
    IF-MIB::ifIndex.1 = INTEGER: 1
    IF-MIB::ifIndex.2 = INTEGER: 2
    IF-MIB::ifIndex.3 = INTEGER: 3
    IF-MIB::ifIndex.4 = INTEGER: 4
    IF-MIB::ifDescr.1 = STRING: lo
    IF-MIB::ifDescr.2 = STRING: eth0
    ....
    #snmpwalk -c public -v2c 59.1.1.1:1161 if
    设定成功;这里存在一个问题就是nc监听的端口每次一连接就会挂起,采取一个比较笨的办法就是写个restart.sh脚本放在crontab中每分钟执行一次;
    产生该问题的主要原因我在下面讲socat的时候会分析的;
    针对snmp采集这样是没有问题,如果dns服务就不行啦!
    三、采用nc升级版本的socat来实现UDP端口映射
    软件包下载地址:http://www.dest-unreach.org/socat/download/
    安装无非就是configure make make install
    socat的主要特点就是在两个数据流之间建立通道;且支持众多协议和链接方式:ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,socket等
    这里不一一介绍啦!
    有兴趣可以查看官方文档:http://www.dest-unreach.org/socat/doc/socat.html
    我们说说如何使用socat建立UPD端口映射
    #socat udp4-listen:11161,reuseaddr,fork UDP:[监控服务器IP]:161
    udp4-listen:在本地建立的是一个udp ipv4协议的监听端口;
    reuseaddr,绑定本地一个端口;
    fork,设定多链接模式,即当一个链接被建立后,自动复制一个同样的端口再进行监听;
    【注:nc就是因为缺少fork模式,所以每次监听只能处理一次连接】
    socat是一个强大的软件,希望与有这方面需求的同仁一起学习这个好的工具!
    ps:无论是nc方式还是socat方式,启动监听模式都是在前端占用一个shell,所以请在后台执行或者使用screen工具等等!
  • 相关阅读:
    flock对文件锁定读写操作的问题 简单
    hdu 2899 Strange Fuction(二分)
    hdu 2199 Can you solve this equation? (二分)
    poj 3080 Blue Jeans (KMP)
    poj 2823 Sliding Window (单调队列)
    poj 2001 Shortest Prefixes (trie)
    poj 2503 Babelfish (trie)
    poj 1936 All in All
    hdu 3507 Print Article (DP, Monotone Queue)
    fzu 1894 志愿者选拔 (单调队列)
  • 原文地址:https://www.cnblogs.com/lexus/p/2798808.html
Copyright © 2020-2023  润新知