Linux迷+Python粉 - nchttps://blog.pythonwood.com/2017-11-30T22:12:00+08:00不能小看的nc——实践TCP协议第四层的软件(传输层)2015-12-20T21:20:00+08:002017-11-30T22:12:00+08:00pythonwoodtag:blog.pythonwood.com,2015-12-20:/2015/12/不能小看的nc——实践TCP协议第四层的软件(传输层)/<p>nc命令全名为netcat,顾名思义就是通过<span class="caps">TCP</span>或<span class="caps">UDP</span>从网络读写数据。</p> <p>很多事情不一定非得抓包,nc也能发挥巨大作用。</p> <h3 id="1">1、传输文件<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3> <h4 id="_1">使用&lt;&gt;重定向符(只适用单文件,不推荐、失败时 &ldquo;&gt;&rdquo; 产生空文件)<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h4> <div class="highlight"><pre><span></span>nc -l 8888 &lt; demo …</pre></div><p>nc命令全名为netcat,顾名思义就是通过<span class="caps">TCP</span>或<span class="caps">UDP</span>从网络读写数据。</p> <p>很多事情不一定非得抓包,nc也能发挥巨大作用。</p> <h3 id="1">1、传输文件<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3> <h4 id="_1">使用&lt;&gt;重定向符(只适用单文件,不推荐、失败时 &ldquo;&gt;&rdquo; 产生空文件)<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h4> <div class="highlight"><pre><span></span>nc -l 8888 &lt; demo.txt # 在本机8888端口侦听TCP连接,将收到的数据写入文件 nc ip 8888 &gt; demo.txt # 文件接收端:将文件内容通过网络&quot;cat&quot;到远端 </pre></div> <h4 id="tar">使用tar传输文件(推荐,好处是保留了原目录结构和权限)<a class="headerlink" href="#tar" title="Permanent link">&para;</a></h4> <div class="highlight"><pre><span></span>tar cz demo1.txt demo_dir/ | nc -l 8888 # 监听8888端口,有连接时开始tar打包并&quot;cat&quot;到远端 nc ip 8888 | tar zx # 连接、接收数据、解压一步到位。 </pre></div> <h3 id="2">2、建立网络管道<a class="headerlink" href="#2" title="Permanent link">&para;</a></h3> <div class="highlight"><pre><span></span>nc -l 8888 # 接收消息 echo msg | nc ip 8888 # 发送消息 </pre></div> <h3 id="3">3、迁移生产机房数据到测试机房(运维电脑建管道)<a class="headerlink" href="#3" title="Permanent link">&para;</a></h3> <div class="highlight"><pre><span></span>tar cz demo1.txt demo_dir/ | nc -l 8888 # 生产机房ipA nc -l 8888 | tar zx # 测试机房ipB nc ipA 8888 | nc ipB 8888 # 运维个人电脑,连通两台机器的8888端口。 </pre></div> <h3 id="4-lbgudp">4、测试网络连通 (排查测试机房的lbg转发udp问题)<a class="headerlink" href="#4-lbgudp" title="Permanent link">&para;</a></h3> <div class="highlight"><pre><span></span>curl 调试http,即7层非常高效。但如何调试4层网络呢?答案就是nc </pre></div> <p>测试机房lbg做了公网udp服务的映射,但测试同学发现程序出错,怀疑网络问题,找运维同学排查。</p> <div class="highlight"><pre><span></span>nc -ul 9999 # 服务ipS 监听9999端口 该端口映射到公网 ipVS:portVS nc -zuv ipS 9999 # 内网udp连通成功 显示Connection to ipS 9999 port [udp/*] succeeded! nc -zuv ipVS portVS # 公网udp连通失败 显示Connection to ipVS portVS port [udp/*] fail! 一、上如何检查tcp?以上的参数u去掉,默认就是tcp。 二、进一步写出nagios插件,检查udp服务端口(以部署在PP的udp消息推送监控中) </pre></div> <h3 id="5telnetmc">5、代替telnet,测试mc,浮云等等。<a class="headerlink" href="#5telnetmc" title="Permanent link">&para;</a></h3> <div class="highlight"><pre><span></span>echo -e &quot;stats\r\n&quot; | nc ipS portMC # 非交换式查看mc的状态。 echo -e &quot;INFO\r\n&quot; | nc ipS portREDIS # 非交换式查看redis的状态。 </pre></div> <!--非交换的set、get检查浮云ds # 已部署到PP的浮云监控。--> <h3 id="6nchttpshellman-nc">6、使用nc发邮件,发送http请求,反弹shell,端口转发等等,请man nc<a class="headerlink" href="#6nchttpshellman-nc" title="Permanent link">&para;</a></h3> <div class="highlight"><pre><span></span>echo -e &quot;GET / HTTP/1.0\r\n&quot; | nc uc.cn 80 </pre></div>