Linux笔记 No.24---(curl、ip、nmcli、网卡/主机名/DNS配置文件、常见网络问题诊断、网络诊断工具:ping/nmap/tcpdump)

一、curl

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具

curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,在"标准输出"(stdout)上显示。它支持多种协议

  1. 查看网站源码

直接在curl命令后加上网址,就可以看到网页源码

curl URL

如果要把这个网页保存下来,可以使用-o参数

curl -o [文件名] URL
  1. 自动跳转

有的网址是自动跳转的。使用-L参数,curl就会跳转到新的网址。

curl -L URL
  1. 显示头信息

-i参数可以显示http response的头信息,连同网页代码一起。

 curl -i URL

-I参数则是只显示http response的头信息

  1. 显示通信过程

-v参数可以显示一次http通信的整个过程,包括端口连接和http request头信息。

curl -v URL

可以查看更详细的通信过程:

curl --trace-ascii FILENAME URL

运行后,打开FILENAME文件查看

  1. 模拟设备

–user-agent 字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页,比如手机版和桌面版。

curl --user-agent "User Agent" URL
  1. cookie

使用--cookie参数,可以让curl发送cookie。

curl --cookie "name=xxx" URL

至于具体的cookie的值,可以从http response头信息的Set-Cookie字段中得到

将服务器设置的 Cookie 写入一个文件

 curl -c FILENAME URL

-c cookie-file可以保存服务器返回的cookie到文件,-b cookie-file可以使用这个文件作为cookie信息,进行后续的请求。

  $ curl -c cookies http://URL
  $ curl -b cookies http://URL
  1. 增加头信息

有时需要在http request之中,自行增加一个头信息。就要使用--header参数

curl --header "Content-Type:application/json" URL
  1. HTTP认证

有些网域需要HTTP认证,这时curl需要用到--user参数。

curl --user name:password URL
  1. 跳过 SSL 检测
curl -k URL
  1. 限制网速
curl --limit-rate 速率 URL

二、ip

ip是iproute2软件包里面的一个强大的网络配置工具。可以用于显示或操作路由、网络设备、设置路由策略和通道等

用法:

ip [ OPTIONS ] OBJECT { COMMAND | help }

Object对象可以是: link 网络设备、addr 设备的协议地址、route 路由表、rule 策略、neigh arp缓存、tunnel ip通道、maddr 多播地址 mroute、多播路由

COMMAND是操作命令,不同的对象有不同的命令设置

对象支持的命令:

  • link(网络设备)对象支持的命令:set、show

  • addr(设备上的协议地址)对象支持的命令:add、del、flush、show

  • route(路由)对象支持的命令:list、flush、get、add、del、change、append、replace、monitor

  • rule(路由策略)对象支持的命令:list、add、del、flush

  • neigh对象支持的命令:add、del、change、replace、show、flush

  • tunnel对象支持的命令:add、change、del、show

  • maddr支持的命令:add、del

  • mroute支持的命令:show

选项:

  • -s :显示详细的信息
  • -f : 指定协议类型
  • -4 :指定使用的网络层协议是IPv4协议
  • -6 :指定使用的网络层协议是IPv6协议
  • -o :输出信息每条记录输出一行,即使内容较多也不换行显示
  • -r :使用系统名字解析DNS

常用用法:

  1. 显示网卡及配置信息 ip addr show
[root@admin ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e7:fb:e7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.126.8/24 brd 192.168.126.255 scope global noprefixroute ens32
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fee7:fbe7/64 scope link 
       valid_lft forever preferred_lft forever

输出内容:

可以看到,系统有两个接口:lo和ens32,lo是环回接口,ens32是网络接口

  • <BROADCAST,MULTICAST,UP,LOWER_UP>:BROADCAST表示该接口支持广播;MULTICAST表示该接口支持多播;UP表示该网络接口已启用;LOWER_UP表示网络电缆已插入,设备已连接至网络
  • mtu 1500:最大传输单位(数据包大小)为1,500字节
  • qdisc pfifo_fast:用于数据包排队
  • state UP:网络接口已启用
  • group default qlen 1000:默认传输队列长度
  • link/ether 00:0c:29:e7:fb:e7:接口的MAC(硬件)地址
  • brd ff:ff:ff:ff:ff:ff:广播地址
  • inet 192.168.126.8/24:IPv4地址
  • brd 192.168.126.255:广播地址
  • scope global:全局有效
  • noprefixroute ens32:地址是静态分配
  • valid_lft forever:IPv4地址的有效使用期限
  • preferred_lft forever:IPv4地址的首选生存期
  • inet6 fe80::20c:29ff:fee7:fbe7/64:IPv6地址
  • scope link:仅在此设备上有效
  • valid_lft forever:IPv6地址的有效使用期限
  • preferred_lft forever:IPv6地址的首选生存期
  1. IP管理

设置IP:

ip addr add IP/Mask dev interface

删除配置的IP:

ip addr del IP/Mask dev interface
  1. 改变设备的属性

启用网卡:

ip link set interface up

禁用网卡:

ip link set interface down

改变网络设备MTU(最大传输单元)的值:

ip link set dev interface mtu NUM

修改网络设备的MAC地址:

 ip link set dev interface address MACADDRESS

开启网卡的混杂模式:

ip link set interface promisc on

关闭网卡的混杂模式:

ip link set interface promisc off
  1. 路由配置

查看路由信息:

ip route [show]
#route 或 route -n ;netstat -r 或 netstat -nr
[root@admin ~]# ip route show
default via 192.168.126.2 dev ens32 proto static metric 100 
192.168.126.0/24 dev ens32 proto kernel scope link src 192.168.126.8 metric 100

输出内容:

  • 第一条是默认路由
  • metric 100 :跳跃计数,确定网关的优先级。Metric的值越小,优先级越高
  • proto kernel:该路由的协议,主要有redirect,kernel,boot,static,ra等,其中kernel指的是直接由核心判断自动设定

查询路由表某IP包从哪条路由来:

ip route get IP

修改特定网卡的默认路由:

 ip route add DESTINATION [via NEXT_HOP] [src SOURCE_ADDRESS] [dev DEVICE] 

删除路由:

ip route del DESTINATION

刷新路由表:

ip route flush cache

列出路由规则:

ip rule [show]
  1. 显示网络统计数据

显示所有网络接口的统计数据:

ip -s link
[root@admin ~]# ip -s link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast   
    0          0        0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    0          0        0       0       0       0       
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:0c:29:e7:fb:e7 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    376823     4819     0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    327849     2715     0       0       0       0       

输出内容:

  • RX:表示接收
  • TX:表示发送
  • bytes:接收/发送的字节数
  • packets:接收/发送的包数
  • errors:接收/发送的带有错误的包总数
  • dropped:由于处理资源不足导致接收/发送的丢弃的包数
  • overrun:因接收溢出(环形缓冲区)导致丢失的包;通常如果接口溢出,则表示内核中存在严重问题,或者说服务器上该网络设备的处理设备太慢
  • mcast:接收到的多播包数
  • carrier:因数据链路错误导致发送失败的包数
  • collsns:因在网络上发送冲突而导致的失败数

获取一个特定网络接口的信息:

ip -s -s link ls interface

  1. ARP表

查看ARP表:

ip neighbour [show]
[root@admin ~]# ip neighbour show
192.168.126.2 dev ens32 lladdr 00:50:56:f2:29:f9 STALE
192.168.126.1 dev ens32 lladdr 00:50:56:c0:00:08 DELAY

输出信息:

  • 相邻的协议地址
  • dev NAME:和相邻节点连接的设备
  • lladdr LLADDRESS:邻居的链路层地址
  • 状态:
    1. none:网络邻居的状态为空。
    2. incomplete:这个邻居正在被解析。
    3. reachable:网络邻居有效并且可达。 stale:邻居有效,但是可能不可达。因此,内核将在首次传输时进行检查。
    4. delay:一个数据包已经发到处于stale 的网络邻居,内核在等待应答信息。 probe:delay
    5. 计时器过期,还没有收到确认信息。内核开始使用ARP/NDISC消息包探测这个网络邻居。 failed:解析失败。
    6. noarp:网络邻居有效,不必检查。 permanent:这是一个noarp 条目,只有系统管理员可以从邻接表中把它删除。

删除邻居信息:

ip neigh del IP dev interface

三、nmcli

网络管理命令行工具nmcli,可用于创建、显示、编辑、删除、激活、和停用网络连接,以及控制和显示网络设备工作状态

可以管理的网络:

  • 有线网卡、无线网卡
  • 动态ip、静态ip
  • 以太网、非以太网
  • 物理网卡、虚拟网卡
  1. 查看网络设备的相关状态
nmcli dev [status]
nmcli dev show interface
  1. 查看设备连接状态
nmcli conn show
  1. 在同一网卡上,配置多个IP地址
nmcli conn mod interface +ipv4.addresses IP/Mask

重启网卡使新添加的IP地址生效

nmcli conn down ens32;nmcli conn up ens32

将interface设备上的名称为interface的connection设置为dhcp获取地址

nmcli con interface modify ipv4.method auto
  1. 删除网卡上的IP地址
nmcli conn mod ens32 -ipv4.addresses IP/Mask
  1. 修改网络配置参数

修改网关地址:

nmcli conn mod ens32 ipv4.gateway IP

修改DNS:

nmcli conn mod ens32 [+]ipv4.dns IP
  1. 添加链接

使用“dhcp”创建新的连接:

nmcli connection add con-name "dhcp" type ethernet ifname 接口名

使用“static”添加地址:

nmcli conn add con-name 连接名 autoconnect yes/no ifname 接口名 type 设备类型 ip4 IP gw4 IP ipv4.dns IP
  1. 删除连接
nmcli conn delete interface

四、网络相关文件

(一)网络配置文件

/etc/sysconfig/network-scripts/xxxxx

[root@xuegod63 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet		#TYPE:接口类型;常见有的Ethernet, Bridge,WLAN,WWAN
BOOTPROTO=none     # 等号后面写:dhcp 表示动态获取IP地址,  static 表示静态IP,none表示不指定,就是静态。
DEFROUTE=yes		#设置为默认路由(yes|no)
IPV4_FAILURE_FATAL=no	#ipv4配置失败是否禁用设备
IPV6INIT=yes	#IPV6是否自动初始化
IPV6_AUTOCONF=yes	#IPV6是否自动配置
IPV6_DEFROUTE=yes	#IPV6是否可以为默认路由
IPV6_FAILURE_FATAL=no	#ipv6配置失败是否禁用设备
NAME=ens33   #网卡物理设备名称
UUID=50eff37c-72b4-407a-a3ee-9ef8ca746b95	#设备标识符
DEVICE=ens33	#网卡设备名称
ONBOOT=yes	#在系统引导时是否激活此设备
DNS1=8.8.8.8	#首选DNS
DNS2=223.5.5.5	#备用DNS
NETMASK=255.255.255.0	#子网掩码,也可使用掩码长度表示(PREFIX=24)
IPADDR=192.168.1.222		#IP地址
PREFIX=24			#子网掩码
GATEWAY=192.168.1.1	#网关


#其它配置参数说明:

#HWADDR:对应的设备的MAC地址
#NM_CONTROLLED: NM是NetworkManager的简写,此网卡是否接受NM控制
#USERCTL:普通用户是否可控制此设备

(二)主机名配置文件

主机名:

  • 静态的(Static hostname)

“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名。

  • 瞬态的(Tansient hostname)

“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配。

  • 灵活的(Pretty hostname)

“灵活”主机名也有人叫做“别名”主机名。
“灵活”主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如eddy01@f5)。
“静态”主机名和“瞬态”主机名都遵从作为互联网域名同样的字符限制规则

查看主机名

hostname命令

hostname		#读取的是/etc/hostname文件中的(静态的)

使用 uname -a 查看到的主机名也是读取自/etc/hostname文件(静态)

hostnamectl命令

查看静态、瞬态或灵活主机名

hostnamectl --static | --transient | --pretty
cat /etc/hostname       #此文件为静态的主机名
或:
cat /etc/hosts			#ip地址与域名快速解析的文件

修改主机名

1.临时修改

hostname  主机名

临时修改主机名,当主机重启之后,主机名会自动改成原来的主机名

也可以通过修改配置文件/etc/hostname来实现主机名的修改(永久生效)

2.永久修改

第一种:使用命

hostnamectl set-hostname [--static]				#修改静态主机名
hostnamectl set-hostname --pretty				#修改灵活主机名
hostnamectl set-hostname --transient			#修改瞬态主机名

在修改静态/瞬态主机名时,任何特殊字符或空白字符会被移除,而提供的参数中的任何大写字母会自动转化为小写;

一旦使用 hostnamectl 修改了静态主机名,/etc/hostname 将被自动更新。然而,/etc/hosts 不会更新以保存所做的修改,所以你每次在修改主机名后一定要手动更新/etc/hosts,之后再重启CentOS 7。否则系统再启动时会很慢。

第二种:写入文件

主机名配置文件

  • /etc/hostname文件
vi /etc/hostname		#直接写入主机名即可

重启后才能生效

  • /etc/hosts文件

hosts文件是linux系统中负责ip地址与域名快速解析的文件,以ASCII格式保存在/etc目录下,文件名为hosts . 记录本机的或其他主机的ip及其对应主机名

在局域网或者是INTERNET上,每台主机都由一个IP地址,它区分每台主机,并可以根据IP进行通讯。但IP地址不方便记忆,所有又有了域名。在一个局域网中,每台机器都有一个主机名,用于区分主机,便于相互访问。

这个文件告诉主机那些域名对应那些ip,哪些主机名对应哪些ip:

[root@eddy ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

一般情况下hosts文件的每行尾一个主机,每行由三部分组成,每个部分由空格隔开。

  • 第一部分:网络IP地址;
  • 第二部分:主机名或域名;
  • 第三部分:主机名别名;

当然每行也可以是两部分,即主机IP地址和主机名。

所以以下命令其实是一个意思:

[root@eddy ~]# ping localhost4
[root@eddy ~]# ping localhost4.localdomain4
[root@eddy ~]# ping localhost.localdomain
[root@eddy ~]# ping localhost
[root@eddy ~]# ping 127.0.0.1

主机名(hostname)和域名(domain)的区别:

  1. 主机名通常在局域网内使用,通过hosts文件,主机名就被解析到对应IP;
  2. 域名通常在INTERNET上使用,但如果本机不想使用internet上的域名解析,这时就可以更改hosts文件,加入自己的域名解析。

(三)DNS配置文件

/etc/resolv.conf

DNS客户机配置文件,用于设置DNS服务器的IP地址及DNS域名,还包含了主机的域名搜索顺序。

该文件是由域名解析器(resolver,一个根据主机名解析IP地址的库)使用的配置文件。它的格式很简单,每行以一个关键字开头,后接一个或多个由空格隔开的参数。

resolv.conf的关键字主要有四个,分别是:

  • nameserver:定义DNS服务器的IP地址

表示解析域名时使用该地址指定的主机为域名服务器。其中域名服务器是按照文件中出现的顺序来查询的,且只有当第一个nameserver没有反应时才查询下面的nameserver

  • domain :定义本地域名

声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用

  • search :定义域名的搜索列表

允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序。它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。

domain和search不能共存;如果同时存在,后面出现的将会被使用。

  • sortlist :对返回的域名进行排序

最主要是nameserver关键字,如果没指定nameserver就找不到DNS服务器,其它关键字是可选的

[root@eddy ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 223.5.5.5
nameserver 223.6.6.6

五、常见网络问题诊断

(1)确保网卡被系统捕获

dmesg |grep -in eth
[root@eddy ~]# dmesg |grep -in eth
1752:[    2.622785] e1000 0000:02:00.0 eth0: (PCI:66MHz:32-bit) 00:0c:29:e7:fb:e7
1753:[    2.622794] e1000 0000:02:00.0 eth0: Intel(R) PRO/1000 Network Connection
1754:[    3.021506] e1000 0000:02:03.0 eth1: (PCI:66MHz:32-bit) 00:0c:29:e7:fb:f1
1755:[    3.021514] e1000 0000:02:03.0 eth1: Intel(R) PRO/1000 Network Connection
# 可知,网卡使用的模块为e1000,使用的芯片Intel

(2)查看网卡信息:

dmesg | grep -i Ethernet

(3)查看网卡硬件信息

 lspci | grep -i Ethernet

(4)查看系统的所有网络接口

ifconfig -a
ip link show

(5)查看某个网络接口的详细信息

ethtool interface

(6)查看某个网卡的配置信息

nmcli dev show interface

(7)查看网卡模块

lsmod |grep e1000
modinfo e1000

Linux查看硬件信息命令

六、网络诊断常用工具

(一)ping

ping 主要通过ICMP数据包来进行整个网络的数据报告

要特别注意的是,ping还是需要通过IP数据包来传送ICMP数据包。

用法:

ping [option]

选项:

  • -c 数值
    执行ping的次数。

  • -n
    在输出数据时不进行IP与主机名的反查。

  • -s 数值
    发送的数据包大小,默认是56bytes。

  • -t 数值
    TTL值,默认255

  • -W 数值
    等待响应对方主机的秒数

  • -M [do |done]
    主要在检测网络的MTU值的大小,两个常见的项目是:

    do :代表传送一个DF标志,让数据包不能重新拆包或打包
    done :代表不传送DF标志,标志数据包可以在其他主机上拆包和打包

  • -I interface
    指定网卡

【例 】

  1. 检测192.168126.8主机是否可达[存在]
[root@eddy ~]# ping -c 3 192.168.126.8
PING 192.168.126.8 (192.168.126.8) 56(84) bytes of data.
64 bytes from 192.168.126.8: icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 192.168.126.8: icmp_seq=2 ttl=64 time=0.102 ms
64 bytes from 192.168.126.8: icmp_seq=3 ttl=64 time=0.108 ms

--- 192.168.126.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.071/0.093/0.108/0.019 ms

#64 bytes :表示本次发送的数据包大小为64bytes
#icmp_seq=1 :ICMP检测的次数
#ttl=64 :所经过的带MAC的节点数
#time=0.071 ms :响应时间,ms(0.001s),us(0.0000001s)

2.使用 -M-s 选项探测某设备的最大MTU值

# 分别指定不同大小且不可拆分包进行多次试验,直到找到Ping通与Ping不通的临界值即为目标主机的最大MTU值

ping -s 数据包大小 -M do destination  

(二)nmap

扫描器是一种能够自动检测主机安全性弱点的程序。扫描器通过发送特定的网络数据包,记录目标主机的应答消息,从而收集关于目标主机的各种信息。目前网络上有很多扫描软件,比较著名的扫描器有SSS,X-Scan,Superscan等,功能最强大的当然是Nmap了。

Nmap(Network Mapper)是一款开放源代码的网络探测和安全审核工具。它用于快速扫描一个网络和一台主机开放的端口,还能使用TCP/IP协议栈特征探测远程主机的操作系统类型

nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。

Nmap包含四项基本功能:

  • 主机发现(Host Discovery)
  • 端口扫描(Port Scanning)
  • 版本侦测(Version Detection)
  • 操作系统侦测(Operating System Detection)

用法:

Nmap [ 扫描类型 ... ] [ 通用选项 ] { 扫描目标说明 }

选项:

扫描类型:

  • -sT
    TCP connect()扫描,这是最基本的TCP扫描方式。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。
  • -sS
    TCP同步扫描(TCP SYN),因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要root权限来定制SYN数据包。
  • -sF/-sX/-sN
    秘密FIN数据包扫描、圣诞树(Xmas Tree)、空(Null)扫描模式。这些扫描方式的理论依据是:关闭的端口需要对你的探测包回应RST包,而打开的端口必需忽略有问题的包
  • -sP
    ping扫描,用ping方式检查网络上哪些主机正在运行。当主机阻塞ICMP echo请求包是ping扫描是无效的。nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。
  • -sU
    如果你想知道在某台主机上提供哪些UDP(用户数据报协议,RFC768)服务,可以使用此选项。
  • -sA
    ACK扫描,这项高级的扫描方法通常可以用来穿过防火墙。
  • -sW
    滑动窗口扫描,非常类似于ACK的扫描。
  • -sR
    RPC扫描,和其它不同的端口扫描方法结合使用。
  • -b
    FTP反弹攻击(bounce attack),连接到防火墙后面的一台FTP服务器做代理,接着进行端口扫描。

通用选项:

  • -P0
    在扫描之前,不ping主机。
  • -PT
    扫描之前,使用TCP ping确定哪些主机正在运行。
  • -PS
    对于root用户,这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描。
  • -PI
    设置这个选项,让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行。
  • -PB
    这是默认的ping扫描选项。它使用ACK(-PT)和ICMP(-PI)两种扫描类型并行扫描。如果防火墙能够过滤其中一种包,使用这种方法,你就能够穿过防火墙。
  • -O
    这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志,也就是操作系统类型。
  • -I
    打开nmap的反向标志扫描功能。
  • -f
    使用碎片IP数据包发送SYN、FIN、XMAS、NULL。包增加包过滤、入侵检测系统的难度,使其无法知道你的企图。
  • -v
    冗余模式。强烈推荐使用这个选项,它会给出扫描过程中的详细信息。
  • -S
    在一些情况下,nmap可能无法确定你的源地址(nmap会告诉你)。在这种情况使用这个选项给出你的IP地址。
  • -g port
    设置扫描的源端口。一些天真的防火墙和包过滤器的规则集允许源端口为DNS(53)或者FTP-DATA(20)的包通过和实现连接。显然,如果攻击者把源端口修改为20或者53,就可以摧毁防火墙的防护。
  • -oN
    把扫描结果重定向到一个可读的文件logfilename中。
  • -oS
    扫描结果输出到标准输出。
  • –host_timeout
    设置扫描一台主机的时间,以毫秒为单位。默认的情况下,没有超时限制。
  • –max_rtt_timeout
    设置对每次探测的等待时间,以毫秒为单位。如果超过这个时间限制就重传或者超时。默认值是大约9000毫秒。
  • –min_rtt_timeout
    设置nmap对每次探测至少等待你指定的时间,以毫秒为单位。
  • -M count
    置进行TCP connect()扫描时,最多使用多少个套接字进行并行的扫描。

扫描目标:

目标地址 可以为IP地址,CIRD地址等

  • -iL filename :从filename文件中读取扫描的目标
  • -iR :让nmap自己随机挑选主机进行扫描
  • -p 端口 :这个选项让你选择要进行扫描的端口号的范围。如:-p 20-30,139,60000
  • -exclude :排除指定主机
  • -excludefile : 排除指定文件中的主机

【例 】

  1. 进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测)
 nmap -sP 192.168.1.0/24       
  1. 仅列出指定网络上的每台主机,不发送任何报文到目标主机
nmap -sL 192.168.1.0/24       
  1. 探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80)
nmap -PS 192.168.1.234		
  1. 穿透防火墙
    -sA :ACK扫描,用于发现防火墙规则,确定它们是有状态的还是无状态的,哪些端口是被过滤的
nmap -sA 192.168.1.234
  1. 使用UDP ping探测主机
nmap -PU 192.168.1.0/24		
  1. 使用频率最高的扫描选项:SYN扫描,又称为半开放扫描,它不打开一个完全的TCP连接,执行得很快
nmap -sS 192.168.1.0/24		
  1. 当SYN扫描不能用时,TCP Connect()扫描就是默认的TCP扫描
nmap -sT 192.168.1.0/24		
  1. UDP扫描用-sU选项,UDP扫描发送空的(没有数据)UDP报头到每个目标端口
nmap -sU 192.168.1.0/24		
  1. 确定目标机支持哪些IP协议 (TCP,ICMP,IGMP等)
nmap -sO 192.168.1.19			
  1. 探测目标主机的操作系统
nmap -O 192.168.1.19			
  1. 探测目标主机的操作系统
nmap -A 192.168.1.19			
  1. 这个选项扫描主机scanme.nmap.org中 所有的保留TCP端口。选项-v启用细节模式
nmap -v scanme.nmap.org		
  1. 进行秘密SYN扫描,对象为主机Saznme所在的“C类”网段 的255台主机。同时尝试确定每台工作主机的操作系统类型。因为进行SYN扫描 和操作系统检测,这个扫描需要有根权限
nmap -sS -O scanme.nmap.org/24  	
  1. 进行主机列举和TCP扫描,对象为B类188.116网段中255个8位子网。这 个测试用于确定系统是否运行了sshd、DNS、imapd或4564端口。如果这些端口 打开,将使用版本检测来确定哪种应用在运行
nmap -sV -p 22,53,110,143,4564 198.116.0-255.1-127      
  1. 随机选择100000台主机扫描是否运行Web服务器(80端口)。由起始阶段 发送探测报文来确定主机是否工作非常浪费时间,而且只需探测主机的一个端口,因 此使用-P0禁止对主机列表
nmap -v -iR 100000 -P0 -p 80		
  1. 扫描4096个IP地址,查找Web服务器(不ping),将结果以Grep和XML格式保存
nmap -P0 -p80 -oX logs/pb-port80scan.xml -oG logs/pb-port80scan.gnmap 216.163.128.20/20		

nmap提供了脚本探测的功能。nmap集成了许多扫描脚本脚本存在于 /usr/share/nmap/scripts目录下

  1. 探测鉴权证书
nmap --script=http-auth.nse 192.168.1.234
  1. 探测常见漏洞
nmap --script=vuln 192.168.1.234
  1. 嗅探脆弱服务
nmap --script=auth 127.0.0.1
  1. 探测服务详细信息
nmap --script=broadcast 127.0.0.1
  1. mysql数据库密码暴力破解
nmap -p 3306 --script=mysql-brute.nse 127.0.0.1

(三)tcpdump

采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上

不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包

用法:

tcpdump [options] [expression]

选项:

  • -A
    以ASCII码方式显示每一个数据包(不会显示数据包中链路层头部信息). 在抓取包含网页数据的数据包时, 可方便查看数据(nt: 即Handy for capturing web pages).

  • -c count
    tcpdump将在接受到count个数据包后退出.

  • -C file-size
    (此选项用于配合-w file 选项使用) :该选项使得tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576)

  • -d
    以容易阅读的形式,在标准输出上打印出编排过的包匹配码, 随后tcpdump停止
    (nt | rt: human readable, 容易阅读的,通常是指以ascii码来打印一些信息. compiled, 编排过的. packet-matching code, 包匹配码,含义未知, 需补充)

  • -dd
    以C语言的形式打印出包匹配码.

  • -ddd
    以十进制数的形式打印出包匹配码(会在包匹配码之前有一个附加的’count’前缀).

  • -D
    打印系统中所有tcpdump可以在其上进行抓包的网络接口.

    每一个接口会打印出数字编号, 相应的接口名字, 以及可能的一个网络接口描述. 其中网络接口名字和数字编号可以用在tcpdump 的-i flag 选项(nt: 把名字或数字代替flag), 来指定要在其上抓包的网络接口.

    如果tcpdump编译时所依赖的libpcap库太老,-D 选项不会被支持, 因为其中缺乏 pcap_findalldevs()函数.

  • -e
    每行的打印输出中将包括数据包的数据链路层头部信息

  • -f
    显示外部的IPv4 地址时(nt: foreign IPv4 addresses, 可理解为, 非本机ip地址), 采用数字方式而不是名字

    由于对外部(foreign)IPv4地址的测试需要用到本地网络接口(nt: tcpdump 抓包时用到的接口)及其IPv4 地址和网络掩码. 如果此地址或网络掩码不可用, 或者此接口根本就没有设置相应网络地址和网络掩码(nt: linux 下的 ‘any’ 网络接口就不需要设置地址和掩码, 不过此’any’接口可以收到系统中所有接口的数据包), 该选项不能正常工作.

  • -F file
    使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略.

  • -i interface:指定tcpdump 需要监听的接口. 如果没有指定, tcpdump 会从系统接口列表中搜寻编号最小的已配置好的接口(不包括 loopback 接口).一但找到第一个符合条件的接口, 搜寻马上结束.

    在采用2.2版本或之后版本内核的Linux 操作系统上, ‘any’ 这个虚拟网络接口可被用来接收所有网络接口上的数据包(nt: 这会包括目的是该网络接口的, 也包括目的不是该网络接口的),需要注意的是如果真实网络接口不能工作在’混杂’模式(promiscuous)下,则无法在’any’这个虚拟的网络接口上抓取其数据包

    如果 -D 标志被指定, tcpdump会打印系统中的接口编号,而该编号就可用于此处的interface 参数.

  • -l
    对标准输出进行行缓冲(使标准输出设备遇到一个换行符就马上把这行的内容打印出来)。在需要同时观察抓包打印以及保存抓包记录的时候很有用。

    比如, 可通过以下命令组合来达到此目的:
    tcpdump -l | tee dat 或者 tcpdump -l > dat & tail -f dat.( 前者使用tee来把tcpdump 的输出同时放到文件dat和标准输出中, 而后者通过重定向操作’>’, 把tcpdump的输出放到dat 文件中, 同时通过tail把dat文件中的内容放到标准输出中)

  • -L

    列出指定网络接口所支持的数据链路层的类型后退出.( 指定接口通过-i 来指定)

  • -m module
    通过module 指定的file 装载SMI MIB 模块

  • -M secret

  • 如果TCP 数据包(TCP segments)有TCP-MD5选项(在RFC 2385有相关描述), 则为其摘要的验证指定一个公共的密钥secret.

  • -n
    不对地址(比如, 主机地址, 端口号)进行数字表示到名字表示的转换.

  • -N
    不打印出host 的域名部分

  • -O
    不启用进行包匹配时所用的优化代码. 当怀疑某些bug是由优化代码引起的, 此选项将很有用.

  • -p
    一般情况下, 把网络接口设置为非’混杂’模式. 但必须注意 , 在特殊情况下此网络接口还是会以’混杂’模式来工作; 从而, ‘-p’ 的设与不设, 不能当做以下选现的代名词:‘ether host {local-hw-add}’ 或 ‘ether broadcast’(nt: 前者表示只匹配以太网地址为host 的包, 后者表示匹配以太网地址为广播地址的数据包).

  • -q
    快速打印输出. 即打印很少的协议相关信息, 从而输出行都比较简短.

  • -R
    设定tcpdump 对 ESP/AH 数据包的解析按照 RFC1825而不是RFC1829(nt: AH, 认证头, ESP, 安全负载封装, 这两者会用在IP包的安全传输机制中). 如果此选项被设置, tcpdump 将不会打印出’禁止中继’域(nt: relay prevention field). 另外,由于ESP/AH规范中没有规定ESP/AH数据包必须拥有协议版本号域,所以tcpdump不能从收到的ESP/AH数据包中推导出协议版本号.

  • -r file
    从文件file 中读取包数据. 如果file 字段为 ‘-’ 符号, 则tcpdump 会从标准输入中读取包数据.

  • -S
    打印TCP 数据包的顺序号时, 使用绝对的顺序号, 而不是相对的顺序号.(相对顺序号可理解为, 相对第一个TCP 包顺序号的差距

    比如, 接受方收到第一个数据包的绝对顺序号为232323, 对于后来接收到的第2个,第3个数据包, tcpdump会打印其序列号为1, 2分别表示与第一个数据包的差距为1 和 2. 而如果此时-S 选项被设置, 对于后来接收到的第2个, 第3个数据包会打印出其绝对顺序号:232324, 232325).

  • -s snaplen
    设置tcpdump的数据包抓取长度为snaplen, 如果不设置默认将会是68字节

    68字节对于IP, ICMP(nt: Internet Control Message Protocol,因特网控制报文协议), TCP 以及 UDP 协议的报文已足够, 但对于名称服务(nt: 可理解为dns, nis等服务), NFS服务相关的数据包会产生包截短. 如果产生包截短这种情况, tcpdump的相应打印输出行中会出现’’[|proto]’'的标志(proto 实际会显示为被截短的数据包的相关协议层次).

    需要注意的是, 采用长的抓取长度(snaplen比较大), 会增加包的处理时间, 并且会减少tcpdump 可缓存的数据包的数量, 从而会导致数据包的丢失. 所以, 在能抓取我们想要的包的前提下, 抓取长度越小越好.把snaplen 设置为0 意味着让tcpdump自动选择合适的长度来抓取数据包.

  • -T type
    强制tcpdump按type指定的协议所描述的包结构来分析收到的数据包.

    目前已知的type 可取的协议为:
    aodv (Ad-hoc On-demand Distance Vector protocol, 按需距离向量路由协议, 在Ad hoc(点对点模式)网络中使用),
    cnfp (Cisco NetFlow protocol), rpc(Remote Procedure Call), rtp (Real-Time Applications protocol),
    rtcp (Real-Time Applications con-trol protocol), snmp (Simple Network Management Protocol),
    tftp (Trivial File Transfer Protocol, 碎文件协议), vat (Visual Audio Tool, 可用于在internet 上进行电
    视电话会议的应用层协议), 以及wb (distributed White Board, 可用于网络会议的应用层协议).

  • -t

    在每行输出中不打印时间戳

  • -tt
    不对每行输出的时间进行格式处理(nt: 这种格式一眼可能看不出其含义, 如时间戳打印成1261798315)

  • -ttt
    tcpdump 输出时, 每两行打印之间会延迟一个段时间(以毫秒为单位)

  • -tttt
    在每行打印的时间戳之前添加日期的打印

  • -u
    打印出未加密的NFS 句柄(nt: handle可理解为NFS 中使用的文件句柄, 这将包括文件夹和文件夹中的文件)

  • -U
    使得当tcpdump在使用-w 选项时, 其文件写入与包的保存同步.(即, 当每个数据包被保存时, 它将及时被写入文件中,而不是等文件的输出缓冲已满时才真正写入此文件)

    -U 标志在老版本的libcap库(nt: tcpdump 所依赖的报文捕获库)上不起作用, 因为其中缺乏pcap_cump_flush()函数.

  • -v

    当分析和打印的时候, 产生详细的输出

    比如, 包的生存时间, 标识, 总长度以及IP包的一些选项. 这也会打开一些附加的包完整性检测, 比如对IP或ICMP包头部的校验和.

  • -vv
    产生比-v更详细的输出. 比如, NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码.

  • -vvv
    产生比-vv更详细的输出

    比如, telent 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面,
    其相应的图形选项将会以16进制的方式打印出来(nt: telnet 的SB,SE选项含义未知, 另需补充).

  • -w
    把包数据直接写入文件而不进行分析和打印输出. 这些包数据可在随后通过-r 选项来重新读入并进行分析和打印.

  • -W filecount
    此选项与-C 选项配合使用, 这将限制可打开的文件数目, 并且当文件数据超过这里设置的限制时, 依次循环替代之前的文件, 这相当于一个拥有filecount 个文件的文件缓冲池. 同时, 该选项会使得每个文件名的开头会出现足够多并用来占位的0, 这可以方便这些文件被正确的排序.

  • -x
    当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据(但不包括连接层的头部).总共打印的数据大小不会超过整个数据包的大小与snaplen 中的最小值.

    必须要注意的是, 如果高层协议数据没有snaplen 这么长,并且数据链路层(比如, Ethernet层)有填充数据, 则这些填充数据也会被打印.(nt: so for link layers that pad, 未能衔接理解和翻译, 需补充 )

  • -xx
    tcpdump 会打印每个包的头部数据, 同时会以16进制打印出每个包的数据, 其中包括数据链路层的头部.

  • -X
    当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据(但不包括连接层的头部).这对于分析一些新协议的数据包很方便.

  • -XX
    当分析和打印时, tcpdump 会打印每个包的头部数据, 同时会以16进制和ASCII码形式打印出每个包的数据, 其中包括数据链路层的头部.这对于分析一些新协议的数据包很方便.

  • -y datalinktype
    设置tcpdump 只捕获数据链路层协议类型是datalinktype的数据包

  • -Z user
    使tcpdump 放弃自己的超级权限(如果以root用户启动tcpdump, tcpdump将会有超级用户权限), 并把当前tcpdump的用户ID设置为user, 组ID设置为user首要所属组的ID(tcpdump 此处可理解为tcpdump 运行之后对应的进程)

tcpdump表达式:

表达式大体可以分成三种,“类型”、“方向”和“协议”,这三种条件的搭配组合就构成了我们的表达式。

  • 类型。主要包括host,net,port, 例如 host 192.168.1.151,指定主机 192.168.1.151,net
    192.168.1.0 指明192.168.1.0是一个网络地址,port 21 指明端口号是21。如果没有指定类型,缺省的
    类型是host.
  • 方向。主要包括 src , dst ,dst or src, dst and src
    这些关键字指明了传输的方向。举例说明,src 192.168.1.151 ,指明ip包中源地址是192.168.1.151, dst
    net 192.168.1.0指明目的网络地址是192.168.1.0 。如果没有指明方向关键字,则缺省是src or dst关
    键字。
  • 协议。关于协议的关键字,主要包括 ether,ip,ip6,arp,rarp,tcp,udp 等类型。这几个的包的协议内容。如果没有指定任何协议,则tcpdump将会监听所有协议的信息包

在这里插入图片描述

还有关键字表达式单元:gateway,broadcast,less,greater以及算术表达式

  • 表达式单元之间可以使用操作and / && / or / || / not / !进行连接,从而组成复杂的条件表
    达式。

    如"host foo and not port ftp and not port ftp-data",这表示筛选的数据包要满足"主机为foo且端口不是ftp(端口21)和ftp-data(端口20)的包",常用端口和名字的对应关系可在linux系统中的/etc/service文件中找到。

  • 另外,同样的修饰符可省略,如"tcp dst port ftp or ftp-data or domain"与"tcp dst port ftp or tcp dst port ftp-data or tcp dst port domain"意义相同,都表示包的协议为tcp且目的端口为ftp或ftp-data或domain(端口53)。

  • 使用括号"()“可以改变表达式的优先级,但需要注意的是括号会被shell解释,所以应该使用反斜线”“转义
    为”()",在需要的时候,还需要包围在引号中。

【例 】

  1. 抓取所有经过ens32网卡,目的IP为192.168.1.1的网络数据
tcpdump -i ens32 host 192.168.1.1
  1. 抓取所有经过ens32网卡,目的端口为22的网络数据
tcpdump -i ens32 dst port 22
  1. 抓取所有经过ens32网卡,协议类型为UDP的网络数据
tcpdump -i ens32 udp
  1. 抓取本地环路端口22的UDP数据
tcpdump -i lo udp port 22
  1. 抓取所有经过ens32网卡的SYN类型数据包
tcpdump -i ens32 'tcp[tcpflags] = tcp-syn'
  1. 抓取经过ens32网卡的所有DNS数据包(默认端口)
tcpdump -i ens32 udp dst port 53
  1. 抓取所有经过ens32网卡,目的网络是192.168.1,但目的主机不是192.168.1.2的TCP数据
tcpdump -i ens32 '((tcp) and ((dst net 192.168.1) and (not dst host
192.168.1.2)))'
  1. 抓取所有经过ens32网卡,目的主机为192.168.1.1的端口22的网络数据并存储
tcpdump -i ens32 host 192.168.1.1 and port 22 -w /tmp/tcpdump
  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:书香水墨 设计师:CSDN官方博客 返回首页
评论

打赏作者

途径日暮不赏丶

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值