原文链接: 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工具等等!

附:

socat官方文档:http://www.dest-unreach.org/socat/doc/socat.html

linux udp 端口映射,Linux下的UDP/TCP端口映射(netcat and socat)相关推荐

  1. mysql命令行查看端口占用_linux下常用命令查看端口占用

    在Linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端口的具体进程和用户,可以通过netstat命令进行简单查询 netstat命令各个参数说明如下: -t : 指明显示TCP端 ...

  2. 需要额外端口信息_使用Python进行TCP端口扫描

    使用Python进行TCP端口扫描 首先我们供给一台主机,要进行的步骤就是对其主机端口的扫描,查看其中开放的端口. 我们创建一个TCP的全连接的扫描器,使用socket来创建连接器. 扫描端口开放 # ...

  3. linux mysql 端口号_linux下mysql 查看默认端口号与修改端口号方法

    一.查看默认端口号 1.登录mysql [root@localhost ~]# mysql -uroot -p Enter password: 输入数据库密码: 2.使用show global var ...

  4. php开启端口复用,请问下workman是否支持端口复用?

    workerman 支持端口复用. bool Worker::$reusePort 设置当前worker是否开启监听端口复用(socket的SO_REUSEPORT选项). 开启监听端口复用后允许多个 ...

  5. 【Python脚本进阶】2.1、端口扫描器(下):NMAP端口扫描

    目录 一.简介 1.1.扩展 1.2.端口扫描类型 1.3.实现: 一.简介 1.1.扩展 由TCP连接扫描脚本,到其他类型的扫描,Nmap端口扫描工具包提供了大量的功能,如提供的ACK.RST.FI ...

  6. linux防火墙开放所有端口命令,linux centos7 防火墙及端口开放相关命令

    一.防火墙相关命令 1.查看防火墙状态 : systemctl status firewalld.service 注:active是绿的running表示防火墙开启 2.关闭防火墙 :systemct ...

  7. Windows 2003 下手动关闭危险端口

    Windows 2003 下手动关闭危险端口怎样关闭端口 默认情况下windows有很多端口是开放的.在你上网的时候,网络病毒和黑客可以通过这些端口连上你的电脑.所以应该关闭.主要有tcp 135 , ...

  8. Windows 中 TCP 端口 139 和 445 的使用

    Microsoft 在 Windows 2000 中引入了 TCP 端口 445,它仍在 Windows 10 和 Windows Server 2019 中使用.我将解释此端口的用途,以及它与 Wi ...

  9. Windows根据TCP端口号查找进程PID再kill进程

    Windows根据TCP端口号查找进程PID再kill进程 Windows环境下,有时候TCP端口莫名其妙的被占用,导致正常的网络端口绑定失败,比如Android开发中,adb无法识别,有时候原因就是 ...

最新文章

  1. Center OS 离线安装Mysql5.7
  2. 主角有智能芯片的种田小说_推荐3本克苏鲁类小说,压抑邪恶与搞笑逗乐并存,看看是你的菜吗...
  3. BU_DATE_CHAR abap screen 日期字段搜索帮助
  4. 深入研究嵌入式操作系统的绝佳教材
  5. 湖北工业大学计算机专硕学费,2019年湖北工业大学硕士研究生学费奖助政策
  6. leetcode 有效的数独
  7. Javascript 的函数式对象(三)利用闭包模拟类的静态变量和方法
  8. linux下重启tomcat命令
  9. As Giants Step In, Asustek Defends A Tiny PC
  10. 无线路由器如何建立ftp服务器,利用无线路由器建立FTP服务器
  11. eclipse Strut2环境搭建
  12. 微信中禁止网页下拉出现网页由XXX提供
  13. spyglass CDC方法学
  14. 怎么写竞品分析报告(思路):
  15. python字符串修改
  16. 十二、梯度和散度--流体力学理论知识
  17. 让智能更落地,让中台更智能
  18. Bonobo Git Server 后台服务安装 详细教程
  19. css中min-height和max-height的区别
  20. 开篇:数据驱动UI的设计理念

热门文章

  1. Javascript实现计数器,定时警告和停止
  2. Red Hat 6.5安装Oracle 10g故障汇总
  3. Android程序打开和关闭输入法
  4. Android Service被系统回收的解决方法
  5. 开机出现“CPU fan error
  6. Win7(包括32和64位)使用GitHub
  7. 3t硬盘坏道检测需要多久_卤素检测报告需要多久更新一次
  8. 信息学奥赛一本通 2047:【例5.16】过滤空格 | OpenJudge NOI 1.7 23:过滤多余的空格
  9. 信息学奥赛一本通(1111:不高兴的津津)
  10. String Problem(HDU-3374)