您的位置:首页 > 理论基础 > 计算机网络

网络常用探测命令:nmap / ncat / tcpdump

2019-07-29 11:47 106 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/weixin_44983653/article/details/97631435

网络常用探测命令:nmap / ncat / tcpdump

  • 使用示例
  • nc / ncat
  • 示例
  • tcpdump
  • 示例
  • nmap

    用于网络探测和安全审核。

    概述

    nmap命令 是一款开放源代码的网络探测和安全审核工具,它的设计目标是快速地扫描大型网络。

    语法

    nmap [OPTIONS] {ARGUMENTS}

    OPTIONS

    -O                        # 激活操作探测
    -P0                       # 只进行扫描,不ping主机
    -PT                       # 是同TCP的ping
    -sV                       # 探测服务版本信息
    -sP                       # ping扫描,仅发现目标主机是否存活
    -ps                       # 发送同步(SYN)报文
    -PU                       # 发送udp ping
    -PE                       # 强制执行直接的ICMPping
    -PB                       # 默认模式,可以使用ICMPping和TCPping
    -6                        # 使用IPv6地址
    -v                        # 得到更多选项信息
    -d                        # 增加调试信息地输出
    -oN                       # 以人们可阅读的格式输出
    -oX                       # 以xml格式向指定文件输出信息
    -oM                       # 以机器可阅读的格式输出
    -A                        # 使用所有高级扫描选项
    --resume                  # 继续上次执行完的扫描
    -P # 指定要扫描的端口,可以是一个单独的端口,用逗号隔开多个端口,使用“-”表示端口范围
    -e                        # 在多网络接口Linux系统中,指定扫描使用的网络接口
    -g                        # 将指定的端口作为源端口进行扫描
    --ttl                     # 指定发送的扫描报文的生存期
    --packet-trace            # 显示扫描过程中收发报文统计
    --scanflags               # 设置在扫描报文中的TCP标志
    --send-eth/--send-ip      # 使用原始以太网发送/构造指定IP发送

    ARGUMENTS

    参数一般为IP地址,需要探测的IP地址

    使用示例

    安装:
    # yum install nmap
    扫描网址 www.magedu.com的开放端口:
    # nmap www.magedu.com

    nc / ncat

    概述

    nc / ncat - Concatenate and redirect sockets(连接并重定向套接字)

    nc / ncat 在CentOS 上是同一个命令工具,是一个功能丰富的网络实用程序,可通过命令行在网络上读写数据。 它旨在成为一种可靠的后端工具,可立即为其他应用程序和用户提供网络连接。

    语法

    ncat [OPTIONS] {ARGUMENTS} {PORTS}
    nc  [-hlnruz]
    [-g<网管>]
    [-G<指向器数目>]
    [-i<延迟秒数>]
    [-o<输出文件>]
    [-p<通信端口>]
    [-s<来源地址>]
    [-v…]
    [-w<超时秒数>]
    [主机名称]	[通信端口…]

    OPTIONS

    -h 查看帮助信息
    -g hop1[,hop2,...]        # 松散源路由跳点(最多8个)
    -G <n>                    # 指向器数目 (4,8,12,...)
    -d, --delay <time>        # 同时建立的最大连接数
    -o, --output <filename>   # 输出文件
    -x, --hex-dump <filename> # 十六进制输出文件
    -i, --idle-timeout <time> # 空闲读/写超时时间
    -p, --source-port port    # 指定特定的源端口
    -s, --source addr         # 指定特定的源ip
    -l, --listen              # 绑定并监听传入的连接
    -k, --keep-open           # 在监听模式下接受多个连接
    -t, --telnet              # 应答Telnet握手协议
    -u, --udp                 # 使用udp代替默认的tcp
    --sctp                # 使用sctp代替默认的tcp
    -w, --wait <time>         # 连接超时时间

    ARGUMENTS

    参数一般为IP地址,需要探测的IP地址

    PORTS

    需要探测的端口

    示例

    Port Scanning(端口扫描)

    端口扫描经常被系统管理员和黑客用来发现在一些机器上开放的端口,帮助他们识别系统中的漏洞。

    # nc -z -v -n 172.31.100.7 21-25
    # 打印21到25所有开放的端口
    # 可以运行在TCP或者UDP模式,默认是TCP,-u参数调整为udp
    
    # z option tell netcat to use zero IO .i.e the connection is closed as soon as it opens and no actual data exchange take place.
    # v option is used for verbose option.
    # n option tell netcat not to use the DNS lookup for the address.
    # 一旦你发现开放的端口,你可以容易的使用 netcat 连接服务抓取他们的banner
    # nc -v 172.31.100.7 21
    # netcat 命令会连接开放端口21并且打印运行在这个端口上服务的banner信息

    Banner是一个文本,Banner是一个你连接的服务发送给你的文本信息。当你试图鉴别漏洞或者服务的类型和版本的时候,Banner信息是非常有用的。但是,并不是所有的服务都会发送banner。

    Chat Server

    If you want to chat with your friend there are numerous software and messenger services available at your disposal.But what if you do not have that luxury anymore like inside your computer lab, where all outside connections are restricted, how will you communicate to your friend who is sitting in the next room. Don’t worry my friend because netcat has a solution for you just create a chat server and a predetermined port and he can connects to you.

    Server
    # nc -l 1567

    netcat 命令在1567端口启动了一个tcp 服务器,所有的标准输出和输入会输出到该端口。输出和输入都在此shell中展示。

    Client
    # nc 172.31.100.7 1567

    不管你在机器B上键入什么都会出现在机器A上。

    File transfer

    Most of the time we are trying to transfer file over network and stumble upon the problem which tool to use. There are again numerous methods available like FTP, SCP, SMB etc. But is it really worth the effort to install and configure such complicated software and create a sever at your machine when you only need to transfer one file and only once.

    Server
    # nc -l 1567 < file.txt
    
    Client
    # nc -n 172.31.100.7 1567 > file.txt

    这里我们创建了一个服务器在A上并且重定向netcat的输入为文件file.txt,那么当任何成功连接到该端口,netcat会发送file的文件内容。
    在客户端我们重定向输出到file.txt,当B连接到A,A发送文件内容,B保存文件内容到file.txt。
    没有必要创建文件源作为Server,我们也可以相反的方法使用。像下面的我们发送文件从B到A,但是服务器创建在A上,这次我们仅需要重定向netcat的输出并且重定向B的输入文件。

    B作为Server
    
    Server
    # nc -l 1567 > file.txt
    
    Client
    # nc 172.31.100.23 1567 < file.txt

    更多示例参考:

    https://www.cnblogs.com/zzPrince/p/6842951.html

    tcpdump

    一款sniffer工具,是Linux上的抓包工具。

    概述

    tcpdump命令 是一款抓包,嗅探器工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用-w选项将数据包保存到文件中,方便以后分析。

    语法

    tcpdump {OPTIONS} {ARGUMENTS}

    OPTIONS

    -a         # 尝试将网络和广播地址转换成名称
    -c #       # 收到指定的数据包数目后,就停止进行抓包操作
    -D         # 列出可用于抓包的接口。将会列出接口的数值编号和接口名,它们都可以用于"-i"后
    -e         # 输出的每行中都将包括数据链路层头部信息,例如源MAC和目标MAC
    -f         # 用数字显示网际网络地址
    -F FILE    # 指定内含表达方式的文件,从文件中读取抓包的表达式。若使用该选项,则命令行中给定的其他表达式都将失效
    -i INFACE  # 使用指定的网络接口送出数据包
    -l         # 使用标准输出列的缓冲区
    -n         # 对地址以数字方式显式,否则显式为主机名,也就是说 -n 选项不做主机名解析
    -nn        # 除了-n的作用外,还把端口显示为数值,否则显示端口服务名
    -N         # 不打印出host的域名部分
    -O         # 不将数据包编码最佳化
    -p         # 不让网络界面进入混杂模式
    -q         # 快速输出,仅列出少数的传输协议信息
    -r FILE    # 从指定的文件读取数据包数据
    -s SIZE    # 设置每个数据包的大小
    -S         # 用绝对而非相对数值列出TCP关联数
    -t         # 在每列倾倒资料上不显示时间戳记
    -tt        # 在每列倾倒资料上显示未经格式化的时间戳记
    -T TYPE    # 强制将表达方式所指定的数据包转译成设置的数据包类型
    -v         # 详细显示指令执行过程
    -vv        # 更详细显示指令执行过程
    -vvv       # 产生比-vv更详细的输出
    -X         # 输出包的头部数据,会以16进制和ASCII两种方式同时输出
    -w FILE    # 把数据包数据写入指定的文件

    -s len
    设置tcpdump的数据包抓取长度为len,如果不设置默认将会是65535字节。对于要抓取的数据包较大时,长度设置不够可能会产生包截断,若出现包截断,输出行中会出现"[|proto]"的标志(proto实际会显示为协议名)。但是抓取len越长,包的处理时间越长,并且会减少tcpdump可缓存的数据包的数量,从而会导致数据包的丢失,所以在能抓取我们想要的包的前提下,抓取长度越小越好。

    ARGUMENTS

    可以对具体的接口进行抓包也可以不指定接口名称

    常用组合选项:

    tcpdump -D
    tcpdump -c num -i int -nn -XX -vvv

    示例

    监视指定网络接口的数据包

    注意:如果不指定网卡,默认tcpdump只会监视第一个网络接口(可通过 ip addr list 进行查看,一般位于第一个的就是第一个网络接口),下面的例子都没有指定网络接口。

    # tcpdump -i ens3

    监视指定主机的数据包

    打印所有进入或离开 tangtang 的数据包。

    # tcpdump host tangtang

    也可指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包。

    # tcpdump host 210.27.48.1

    打印 Lee 与 tangtang 或者与 Neo 之间通信的数据包。

    # tcpdump host Lee and \( tangtang or Neo \)

    截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信。

    # tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

    打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包。

    # tcpdump ip host ace and not helios

    如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包。

    # tcpdump ip host 210.27.48.1 and ! 210.27.48.2

    抓取eth0网卡上的包。

    # tcpdump -i eth0

    截获主机hostname发送的所有数据。

    # tcpdump -i eth0 src host hostname

    监视所有送到主机hostname的数据包。

    # tcpdump -i eth0 dst host hostname

    监视指定主机和端口的数据包

    如果想要获取主机210.27.48.1接收或发出的telnet包。

    # tcpdump tcp port 23 and host 210.27.48.1

    对本机的udp 123 端口进行监视 123 为ntp的服务端口。

    # tcpdump udp port 123

    监视指定网络或协议的数据包

    抓取80端口的HTTP报文,以文本形式展示。

    # sudo tcpdump -i any port 80 -A

    打印所有源地址或目标地址是本地主机的IP数据包,如果本地网络通过网关连到了另一网络,则另一网络并不能算作本地网络。

    # tcpdump ip and not net localnet

    打印所有通过网关snup的ftp数据包。(注意:表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析。)

    # tcpdump 'gateway snup and (port ftp or ftp-data)'

    打印本地主机与Berkeley网络上的主机之间的所有通信数据包。(ucb-ether此处可理解为“Berkeley网络”的网络地址,此表达式最原始的含义可表达为:打印网络地址为ucb-ether的所有数据包。)

    # tcpdump net ucb-ether

    解析数据包

    [root@server2 ~]# tcpdump -c 2 -q -XX -vvv -nn -i eth0 tcp dst port 22
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
    12:15:54.788812 IP (tos 0x0, ttl 64, id 19303, offset 0, flags [DF], proto TCP (6), length 40)
    192.168.100.1.5788 > 192.168.100.62.22: tcp 0
    0x0000:  000c 2908 9234 0050 56c0 0008 0800 4500  ..)..4.PV.....E.
    0x0010:  0028 4b67 4000 4006 a5d8 c0a8 6401 c0a8  .(Kg@.@.....d...
    0x0020:  643e 169c 0016 2426 5fd6 1fec 2b62 5010  d>....$&_...+bP.
    0x0030:  0803 7844 0000 0000 0000 0000            ..xD........
    12:15:54.842641 IP (tos 0x0, ttl 64, id 19304, offset 0, flags [DF], proto TCP (6), length 40)
    192.168.100.1.5788 > 192.168.100.62.22: tcp 0
    0x0000:  000c 2908 9234 0050 56c0 0008 0800 4500  ..)..4.PV.....E.
    0x0010:  0028 4b68 4000 4006 a5d7 c0a8 6401 c0a8  .(Kh@.@.....d...
    0x0020:  643e 169c 0016 2426 5fd6 1fec 2d62 5010  d>....$&_...-bP.
    0x0030:  0801 7646 0000 0000 0000 0000            ..vF........
    2 packets captured
    2 packets received by filter
    0 packets dropped by kernel
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: