zoukankan      html  css  js  c++  java
  • nc

    nc 是 Linux下强大的网络命令行工具,主要用于 TCP、UDP、UNIX域套接字 相关的操作

    它被设计成可以由其他程序灵活驱动可靠的后台工具,拥有 "瑞士军刀" 的美称,每个系统管理员都应该掌握它

    安装

    以下是 nc工具的安装,完成后执行 nc --version命令, 如果返回nc的版本信息表示安装成功

    yum install nc
    [root@ecs-centos-7 ~]# nc --version
    Ncat: Version 7.50 ( https://nmap.org/ncat )
    

    扫描端口

    有时需要测试服务器的端口连通性,下面是测试服务器(IP:10.3.3.3 22) 22 端口是否开启的例子

    [root@ecs-centos-7 ~]# nc -z -v -w 3 10.3.3.3 22
    Ncat: Version 7.50 ( https://nmap.org/ncat )
    Ncat: Connected to 10.3.3.3 22:22.
    Ncat: 0 bytes sent, 0 bytes received in 0.03 seconds.
    [root@ecs-centos-7 ~]# nc -z -v -w 3 10.3.3.3 22 6000
    Ncat: Version 7.50 ( https://nmap.org/ncat )
    Ncat: Connection refused.
    

    -z 选项是报告连接状态(只连接不发送数据)

    -v 选项是输出命令过程信息,

    -w 是设置超时时间,默认是秒,如果要设置毫秒的话,可以在数字后面加上 ms, 比如:-w 3 是3秒超时,-w 300ms 表示超时时间是300毫秒

    从上面的结果可以看出,目标服务器上 22 端口是开启的,6000 端口是关闭的

    例子中扫描的是 TCP 协议的端口,如果要扫描 UDP 协议的端口,需要加上 -u 选项,如果换成 UDP端口的话,上面的命令就会变成 nc -uz -v -w 3 10.3.3.3 22

    聊天服务器

    机器A的终端开启端口侦听,机器B连接A侦听的端口并向A发送数据。具体过程如下:

    63机器相当于一个简易的命令行聊天服务器,64机器相当于客户端的功能,默认使用 TCP 协议连接服务器

    可以看到,63机器在本地开启一个侦听8000端口的服务,64机器连接63机器的8000端口,连接成功之后可以互相发送数据了

    传输文件

    机器A和机器B之间可以通过 nc 命令传输文件,具体步骤如下:

    63机器作为服务器,侦听8000端口并重定向到 out.txt 文件,64机器连接63成功之后,自动把 input.txt 文件传输到服务器

    创建后门

    可以在系统中创建后门执行bash命令的服务,因为涉及到系统安全性问题,所以生产环境要慎用,不过平时在内网开发环境中用来测试的话就很方便了,具体的使用步骤如下:

    上面的例子中,63机器开启端口 8000 的本地服务,服务会使用 /bin/bash 执行收到的命令,64机器客户端连上63机器后,输入任意的命令,都相当于在63机器上执行,命令结果返回给64机器

    说明:-e 选项默认使用的是 /bin/bash 执行命令, 这里的 -e 也可以换成 -c ,唯一区别是 -c 默认使用的是 /bin/sh 执行命令

    远程执行脚本

    nc 支持远程执行 shell 脚本和 lua 脚本

    • shell 脚本
      脚本 s.sh 脚本内容如下:
    #!/bin/sh
    
    echo "this is a shell programming..."
    

    服务器端

    nc -l 192.168.70.63 8000 --sh-exec ./s.sh  
    

    客户端

    [cgyx@cghost35 ~]$ nc 192.168.70.63 8000
    this is a shell programming...
    
    • lua 脚本
      脚本 t.lua 内容如下:
    x = 5
    y = 3
    h = x + y
    print('this is a lua test..h:',h)
    

    服务器端

    nc -l 192.168.70.63 8000 --lua-exec t.lua 
    

    客户端

    [cgyx@cghost35 ~]$ nc 192.168.70.63 8000
    this is a lua test..h:  8
    
    

    Web服务器

    nc 可以当做简易的 web 服务器,现服务器本地有一个 index.html 文件,内容如下

    HTTP/1.0 200 OK
    <html>
            <head>
                  <title>Test Page</title>
            </head>
            <body>
                    <p>This is a Netcat Basic HTTP server!</p>
            </body>
    </html>
    

    服务器执行 nc -k -l 192.168.70.63 8080 < index.html 命令监听8080端口

    打开浏览器,地址栏输入 192.168.70.63:8080,具体效果如下图:

    此时,服务器端的输出如下:

    注意:-k 选项是指监听模式接受多个连接,如果没有指定 -k 选项的话,浏览器访问一次,服务器就会退出了

    作为浏览器

    nc 不仅可以当作web服务器,还可以当作浏览器发送HTTP请求

    以百度首页为例, 输入 nc www.baidu.com 80,回车之后,再次输入 GET / HTTP/1.0 再次敲击两次回车,即可获得百度首页的 HTML 文档内容,由于百度首页HTML太长,下面的例子只是文档的部分内容

    [cgyx@cghost35 ~]$ nc www.baidu.com 80
    GET / HTTP/1.0
    
    HTTP/1.0 200 OK
    Accept-Ranges: bytes
    Cache-Control: no-cache
    Content-Length: 14615
    Content-Type: text/html
    Date: Thu, 16 Jul 2020 06:49:16 GMT
    P3p: CP=" OTI DSP COR IVA OUR IND COM "
    P3p: CP=" OTI DSP COR IVA OUR IND COM "
    Pragma: no-cache
    Server: BWS/1.1
    

    查找运行在端口上的服务

    nc 可以扫描指定IP上指定端口是否开启,那能否查找到指定IP上运行于指定端口上的服务呢? 答案是肯定的,以下的例子是获取指定IP上 22 号端口上运行的服务

    [root@ecs-centos-7 ~]# nc -v -n 10.3.3.3 22
    Ncat: Version 7.50 ( https://nmap.org/ncat )
    Ncat: Connected to 10.3.3.3 22.
    SSH-2.0-OpenSSH_6.6.1
    

    从上面的例子中可以看出,机器(IP:10.3.3.3)上22号端口上运行的是SSH服务

    访问控制

    服务器端可以只接受指定的IP的连接或者只拒绝指定IP的连接

    注意 :

    1、下面的例子中 增加 -k 选项是让服务器接受多个连接,避免接受一个客户端连接就退出了

    2、--lua-exec t.lua 为了客户端连上服务器之后返回一个打印字符串,来表示连接服务器成功

    • 只允许指定的IP

    只允许IP为 192.168.62 客户端连接

    nc -k -l 192.168.63 8000 --lua-exec t.lua --allow 192.168.62
    

    只允许IP为 192.168.62 和 192.168.64 的客户端连接

    nc -k -l 192.168.63 8000 --lua-exec t.lua --allow 192.168.62 --allow 192.168.64
    

    只允许内网IP段的客户端连接

    nc -k -l 192.168.63 8000 --lua-exec t.lua --allow 192.168.62-64
    

    从文件中获取允许访问的IP地址列表

    [cgyx@cghost35 ~]$ cat allow.txt 
    192.168.70.62
    192.168.70.64
    [cgyx@cghost35 ~]$ nc -k -l 8000 --lua-exec t.lua  --allowfile allow.txt
    
    • 只拒绝指定的IP

    只拒绝IP为 192.168.62 的客户端

    nc -k -l 192.168.63 8000 --lua-exec t.lua --deny 192.168.62
    

    只拒绝IP为 192.168.62 和 192.168.64 的客户端连接

    nc -k -l 192.168.63 8000 --lua-exec t.lua --deny 192.168.62 --deny 192.168.64
    

    只拒绝内网IP段的客户端连接

    nc -k -l 192.168.63 8000 --lua-exec t.lua --deny 192.168.62-64
    

    从文件中获取deny访问的IP地址列表

    [cgyx@cghost35 ~]$ cat deny.txt 
    192.168.70.62
    192.168.70.64
    [cgyx@cghost35 ~]$ nc -k -l 8000 --lua-exec t.lua  --denyfile deny.txt
    
  • 相关阅读:
    在WinDBG中查看变量的命令
    在WinDBG中查看调用栈的命令
    伪寄存器
    STORED PROCEDURES: GOOD OR BAD(存储过程:好还是坏)
    第十二章 PL/SQL应用程序性能调优
    第十章 PL/SQL对象类型
    第五章 PL/SQL集合与记录
    第二章 PL/SQL基础
    第一章 PL/SQL一览
    第三章 PL/SQL数据类型
  • 原文地址:https://www.cnblogs.com/wanng/p/nc-command.html
Copyright © 2011-2022 走看看