Linux入门攻坚——12、Linux网络属性配置相关知识2
CentOS 7网络属性配置:
传统命名机制:以太网eth[0,1,2,...],wlan[0,1,2...]
 可预测功能的命名机制:
     udev支持多种不同的命名方案:
         Firmware ,拓扑结构
    在对待设备文件这块,Linux改变了几次策略。早期,设备文件仅仅是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev目录下。后来,采用了devfs,一个基于内核的动态设备文件系统,他首次出现在2.3.46 内核中。devfs创建的设备文件是动态的。但是devfs有一些严重的限制,从 2.6.13版本后移走了。目前取代他的便是udev--一个用户空间程序。
 在工作中多次碰到这样的要求:linux系统中原来有一块SCSI硬盘,系统分配的设备文件是/dev/sda。现在新增加了一个外置的磁盘阵列,通过SCSI卡连接。但接上这个磁盘阵列后,/dev/sda变成了磁盘阵列的硬盘了,原来内置的SCSI硬盘变成了 /dev/sdb,现在希望将设备文件固定下来。过去,这个比较麻烦,因为/dev/sda等文件都是linux内核自动分配的。很难固定下来,除非你更改加载SCSI卡驱动程序的顺序,让内置硬盘连接的SCSI卡比外接磁盘阵列连接的SCSI卡的驱动模块先加载到内核,这样就能保证/dev/sda总是指向内置的硬盘。但这种解决方法毕竟不太完美,而且对于其他的即插即用设备,如USB设备等都不适用。
 udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。udev能够实现所有devfs实现的功能。但udev运行在用户模式中,而devfs运行在内核中。据称:devfs具有一些不太容易解决的先天缺陷。
udev的工作过程:
 1. 当内核检测到在系统中出现了新设备后,内核会在sysfs文件系统中为该新设备生成一项新的记录,一般sysfs文件系统会被 mount到 /sys目录中。新记录是以一个或多个文件或目录的方式来表示。每个文件都包含有特定的信息。
  2. udev在系统中是以守护进程的方式udevd在运行,它通过某种途径,检测到新设备的出现,通过查找设备对应的sysfs中的记录得到设备的一些信息。
  3. udev 会根据/etc/udev/udev.conf文件中的udev_rules指定的目录,逐个检查该目录下的文件,这个目录下的文件都是针对某类或某个设备应该施行什么措施的规则文件。udev读取文件是按照文件名的ASCII字母顺序来读取的,如果udev一旦找到了与新加入的设备匹配的规则,udev 就会根据规则定义的措施对新设备进行配置。同时不再读后续的规则文件。
    (1)网卡命名机制
         systemd对网络设备的命名方式:
             1)如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,例如:eno1;
             2)如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如:ens1;
             3)如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0;
             4)如果用户显示启动,也可根据MAC地址进行命名,enx2387aadc56;
             5)上述均不可用,则使用传统命名机制;
上述命名机制中,有的需要biosdevname程序的参与;
    (2)名称组成格式
             en:ethernet
             wl:wlan,无线局域网设备
             ww:wwan,无线广域网设备
         名称类型:
             o<index>:集成设备的设备索引号;
             s<slot>:扩展槽的索引号,支持虚拟设备
             x<MAC>:基于MAC地址的命名;
             p<bus>s<slot>:enp2s1
    网卡设备的命名过程:
         第一步:
             udev,辅助工具程序/lib/udev/rename_device,根据 /usr/lib/udev/rules.d/60-net.rules的指示,查找/etc/sysconfig/network-scripts/下的ifcfg-文件,如果HWADDR相同,将其中的DEVICE值作为网卡的名字。

         第二步:
             biosdevname会根据/usr/lib/udev/rules.d/71-biosdevname.rules所定义的规则进行命名

         第三步:
             通过检测网络接口设备,根据/usr/lib/udev/rules.d/75-net-description.rules
             ID_NET_NAME_ONBOARD,ID_NET_NAME_SLOT,ID_NET_NAME_PATH
对于CentOS6,是在/lib/udev/rules.d/目录下。
    回归传统命名方式:
         1)编辑/etc/default/grub配置文件
             GRUB_CMDLINE_LINUX="net.ifnames=0 rhgb quiet"
         2)为grub2生成其配置文件
             grub2-mkconfig -o /etc/grub2.cfg
         3)重启系统
地址配置工具:nmcli
0.8.1版本:nmcli  [ OPTIONS ] OBJECT { COMMAND | help }
 1.18.8版本:
nmcli [OPTIONS...] {help | general | networking | radio | connection | device |
              agent | monitor} [COMMAND] [ARGUMENTS...]
[root@localhost rules.d]# nmcli help
Usage: nmcli [OPTIONS] OBJECT { COMMAND | help }
OPTIONS
  -a, --ask                                ask for missing parameters
  -c, --colors auto|yes|no                 whether to use colors in output
  -e, --escape yes|no                      escape columns separators in values
  -f, --fields <field,...>|all|common      specify fields to output
  -g, --get-values <field,...>|all|common  shortcut for -m tabular -t -f
  -h, --help                               print this help
  -m, --mode tabular|multiline             output mode
  -o, --overview                           overview mode
  -p, --pretty                             pretty output
  -s, --show-secrets                       allow displaying passwords
  -t, --terse                              terse output
  -v, --version                            show program version
  -w, --wait <seconds>                     set timeout waiting for finishing operations
OBJECT
  g[eneral]       NetworkManager's general status and operations
  n[etworking]    overall networking control
  r[adio]         NetworkManager radio switches
  c[onnection]    NetworkManager's connections
  d[evice]        devices managed by NetworkManager
  a[gent]         NetworkManager secret agent or polkit agent
  m[onitor]       monitor NetworkManager changes
 
nmcli general {status | hostname | permissions | logging} [ARGUMENTS...]
nmcli networking {on | off | connectivity} [ARGUMENTS...]
nmcli connection {show | up | down | modify | add | edit | clone | delete |
                         monitor | reload | load | import | export} [ARGUMENTS...]
      modify [--temporary] [id | uuid | path] <ID> ([+|-]<setting>.<property> <value>)+

 setting.property:
     ipv4.address
     ipv4.gateway
     ipv4.dns
     ipv4.method
nmcli c modify ens33 -ipv4.address 192.168.138.139/24      删除IP
 添加网关:[root@localhost rules.d]# nmcli c modify ens33 ipv4.gateway 192.168.138.2
 错误:修改连接 "ens33" 失败:ipv4.gateway: 如果没有配置地址,网关会无法设置
[root@localhost rules.d]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=4c3624ae-a8b2-4dbc-8aec-5e475bc122c8
DEVICE=ens33
ONBOOT=yes
PEERDNS=no
PEERROUTES=no
[root@localhost rules.d]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=4c3624ae-a8b2-4dbc-8aec-5e475bc122c8
DEVICE=ens33
ONBOOT=yes
PEERDNS=no
PEERROUTES=no
IPADDR=192.168.138.139
PREFIX=24
GATEWAY=192.168.138.2
[root@localhost rules.d]# 
 
出现错误,IP地址配的是dhcp,查看/etc/sysconfig/network-scripts/ifcfg-ens33,如上,然后增加了一个IP:192.168.138.139/24,然后再增加网关,就成功了。
 nmcli device {status | show | set | connect | reapply | modify | disconnect |
                     delete | monitor | wifi | lldp} [ARGUMENTS...]
Linux语言环境管理命令:localectl

nmtui工具:nmtui
主机名称配置工具:hostname与hostnamectl命令:
网络客户端工具:lftp,ftp,lftpget,wget
安装:yum install lftp
lft [-p port] [-u user [, password]] server
在CentOS7下访问windows下的ftp服务器时,中文出现乱码,登录后进行如下设置(CentOS7的LANG=zh_CN.UTF-8):
lftp admin@192.168.138.1:/> set ftp:charset gbk
 lftp admin@192.168.138.1:/> set file:charset utf8


下载文件,使用get(下载单个文件),或mget(同时下载多个文件),mget *,下载所有文件
lftpget URL
ftp已落后,不建议使用了。
wget :
     wget [option]...  URL...
         -q:静默模式
         -c:续传
         -O:保存位置(另存为别的名字)
         --limit-rates=:指定传输速率
nmap,ncat,tcpdump
nmap:“Network Mapper(网络映射器)”。是一款网络探测和安全审核的工具。目标是快速地扫描大型网络。它使用原始IP报文来发现网络上有哪些主机,主机提供什么服务(应用程序名和版本),服务运行在什么操作系统(包括版本信息), 它们使用什么类型的报文过滤器/防火墙,以及其它功能。

用法:nmap [Scan Type(s)] [Options] {target specification}
 其中,target Specification用于指定扫描的目标,可以是一个主机或是一个网络,主机可以使用IP或主机名等。如指定一个IP:192.168.138.137,指定一个名字,如:www.baidu.com,指定一个网络,如:192.168.138.0/24,使用IP地址,四个数字部分都可以使用范围表示:如192.168.138.1-254,代表扫描192.168.138.1到192.168.138.254,或者192.168.138-140.1-254。使用逗号是列出多个值,如192.168.138.1,3-5,代表192.168.138.1,192.168.138.3,192.168.138.4,192.168.138.5.
 选项:
     -sL:仅仅列出要扫描的目标列表
     -sP:ping扫描,仅仅确定主机是否在线
 从运行报表结果可以看到,只报告在线的主机及其MAC地址,没有其他信息。
     -p<port range>:扫描开放相关端口的主机
     -A:激烈扫描模式,会扫描很多信息,包括操作系统、端口、服务、等等。
这里只是入门,nmap更详细的使用需要以后使用中再精通。
 Usage: nmap [Scan Type(s)] [Options] {target specification}
 TARGET SPECIFICATION:
   Can pass hostnames, IP addresses, networks, etc.
       Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0-255.0-255.1-254
      -iL <inputfilename>: Input from list of hosts/networks
       -iR <num hosts>: Choose random targets
       --exclude <host1[,host2][,host3],...>: Exclude hosts/networks
       --excludefile <exclude_file>: Exclude list from file
 HOST DISCOVERY:
       -sL: List Scan - simply list targets to scan
       -sP: Ping Scan - go no further than determining if host is online
       -P0: Treat all hosts as online -- skip host discovery
       -PS/PA/PU [portlist]: TCP SYN/ACK or UDP discovery probes to given ports
       -PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes
       -n/-R: Never do DNS resolution/Always resolve [default: sometimes resolve]
 SCAN TECHNIQUES:
       -sS/sT/sA/sW/sM: TCP SYN/Connect()/ACK/Window/Maimon scans
       -sN/sF/sX: TCP Null, FIN, and Xmas scans
       --scanflags <flags>: Customize TCP scan flags
       -sI <zombie host[:probeport]>: Idlescan
       -sO: IP protocol scan
       -b <ftp relay host>: FTP bounce scan
 PORT SPECIFICATION AND SCAN ORDER:
       -p <port ranges>: Only scan specified ports
         Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080
       -F: Fast - Scan only the ports listed in the nmap-services file)
       -r: Scan ports sequentially - don't randomize
 SERVICE/VERSION DETECTION:
       -sV: Probe open ports to determine service/version info
       --version-light: Limit to most likely probes for faster identification
       --version-all: Try every single probe for version detection
       --version-trace: Show detailed version scan activity (for debugging)
 OS DETECTION:
       -O: Enable OS detection
       --osscan-limit: Limit OS detection to promising targets
       --osscan-guess: Guess OS more aggressively
 TIMING AND PERFORMANCE:
       -T[0-6]: Set timing template (higher is faster)
       --min-hostgroup/max-hostgroup <size>: Parallel host scan group sizes
       --min-parallelism/max-parallelism <numprobes>: Probe parallelization
       --min-rtt-timeout/max-rtt-timeout/initial-rtt-timeout <msec>: Specifies
       probe round trip time.
       --host-timeout <msec>: Give up on target after this long
       --scan-delay/--max-scan-delay <msec>: Adjust delay between probes
 FIREWALL/IDS EVASION AND SPOOFING:
       -f; --mtu <val>: fragment packets (optionally w/given MTU)
       -D <decoy1,decoy2[,ME],...>: Cloak a scan with decoys
       -S <IP_Address>: Spoof source address
       -e <iface>: Use specified interface
       -g/--source-port <portnum>: Use given port number
       --data-length <num>: Append random data to sent packets
       --ttl <val>: Set IP time-to-live field
       --spoof-mac <mac address, prefix, or vendor name>: Spoof your MAC address
 OUTPUT:
   -oN/-oX/-oS/-oG <file>: Output scan results in normal, XML, s|<rIpt kIddi3,
      and Grepable format, respectively, to the given filename.
       -oA <basename>: Output in the three major formats at once
       -v: Increase verbosity level (use twice for more effect)
       -d[level]: Set or increase debugging level (Up to 9 is meaningful)
       --packet-trace: Show all packets sent and received
       --iflist: Print host interfaces and routes (for debugging)
       --append-output: Append to rather than clobber specified output files
       --resume <filename>: Resume an aborted scan
       --stylesheet <path/URL>: XSL stylesheet to transform XML output to HTML
       --no-stylesheet: Prevent Nmap from associating XSL stylesheet w/XML output
 MISC:
       -6: Enable IPv6 scanning
       -A: Enables OS detection and Version detection
       --datadir <dirname>: Specify custom Nmap data file location
       --send-eth/--send-ip: Send packets using raw ethernet frames or IP packets
       --privileged: Assume that the user is fully privileged
       -V: Print version number
       -h: Print this help summary page.
 EXAMPLES:
       nmap -v -A scanme.nmap.org
       nmap -v -sP 192.168.0.0/16 10.0.0.0/8
       nmap -v -iR 10000 -P0 -p 80
ncat:ncat即Netcat,用于从TCP/UDP连接中读取或发送网络数据,连接和重定向套接字
 有如下作用:
     端口侦听,ncat 可以作为 server 以 TCP 或 UDP 方式侦听指定端口;
     端口扫描,ncat 可以作为 client 发起 TCP 或 UDP 请求;
     机器之间传输文件;
     机器之间网络测速。
 命令格式:ncat [OPTIONS...] [hostname] [port]
 选项说明:
| -4/6 强制只使用 IPv4/IPv6 地址。 -d, --delay <time> 读/写之间等待时间。 -h, --help 打印出帮助信息。 -k, --keep-open 在当前连接完成后继续侦听另一个连接。注意如果不使用 -l 选项,则使用此选项是错误的。 -l, --listen 指定应该侦听传入的连接,而不是启动到远程主机的连接。将此选项与 -p、-s 或 -z 选项结合使用是错误的。此外,使用 -w 选项指定的超时将被忽略。 -n, --nodns 不要在任何指定的地址、主机名或端口上执行任何 DNS 或服务查找。 -t, --telnet 使 nc 发送 RFC 854 DON'T 和 WON'T 响应 RFC 854 的 DO 和 WILL 请求。这使得使用 nc 编写 telnet 会话脚本成为可能 -U, --unixsock 指定使用 Unix 域套接字。 -u, --udp 使用 UDP 代替默认选项 TCP。 -v, --verbose 显示命令执行过程。 -z 表示 zero,只扫描侦听守护进程,而不向它们发送任何数据。此选项与 -l 选项结合使用是错误的 -C, --crlf 发送 CRLF 作为换行符。 -i, --idle-timeout <time> 空闲读/写超时时间。 -p, --source-port <port> 指定源端口,但须受特权限制和可用性限制。将此选项与 -l 选项结合使用是错误的。 -s, --source <addr> 设置本地主机送出数据包的 IP 地址。注意将此选项与 -l 选项结合使用是错误的。 -w, --wait <time> 如果连接和 stdin 空闲超过指定秒数,则连接将被关闭。-w 标志对 -l 选项没有影响。缺省不超时。 -o, --output <filename> 将会话数据转储到文件。 -x, --hex-dump <filename> 将会话数据作为十六进制转储到文件。 --version 显示版本信息。  | 
监听本地端口:使用-l选项
ncat -vl 8888     

在192.168.138.137的8888端口启动监听,在132机器上连接此端口。
 双方可以通话了,类似聊天功能。
 文件传输:把 A 机器上的一个文本文件发送到 B 机器上,需注意操作次序,receiver 先侦听端口,sender 向 receiver 所在机器的该端口发送数据。

检查SSH版本信息:
tcpdump:一个运行在命令行下的抓包工具。
 语法:
 tcpdump [ -AdDefIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
                [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
                [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
                [ -P in|out|inout ]
                [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
                [ -W filecount ]
                [ -E spi@ipaddr algo:secret,...  ]
                [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
                [ expression ]
|   -a  将网络地址和广播地址转变成名字 -v   产生详细的输出. 比如包的TTL,id标识,数据包长度,以及IP包的一些选项。同时它还会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和。  | 
tcpdump -i ens33    #捕获指定接口(网卡)的数据包
tcpdump -i ens33 -c 3       #捕获指定个数的数据包(3个数据包)
tcpdump -A -i ens33 -c 3    #用ASCII码格式输出捕获的数据包
tcpdump -XX -i ens33        #用十六进制和ASCII码格式显示捕获的数据包

tcpdump -D    #显示可用的系统接口

tcpdump -w mydata.pcap -i ens33 -c 10      #把捕获的数据包写入到一个.pcap后缀的文件中
tcpdump -r tempDump.pcap    #读取捕获数据包文件的内容
tcpdump -n -i eth0    # 单个 n 表示不解析域名,直接显示 IP
tcpdump -i eth0 tcp    #捕获TCP类型的数据包,tcp可以换成其他,icmp如
tcpdump -i eth0 port 22   #捕获指定端口(这里是22)的数据包
tcpdump -i eth0 src 源ip地址   #捕获请求源是 192.169.12.101 的数据包
tcpdump -i eth0 dst 目标ip地址   #捕获指定目的IP的数据包
tcpdump -i eth0 dst host 目标ip地址 and port 8800 -w data.pcap  #抓取指定网卡,指定IP和端口的数据包 并写入到data.pcap文件中
tcpdump host 192.168.12.101 and 192.168.1.201 -w out &  #后台抓取两主机之间的数据
tcpdump -nn 单个 n 表示不解析域名,直接显示 IP;两个 n 表示不解析域名和端口。这样不仅方便查看 IP 和端口号,而且在抓取大量数据时非常高效,因为域名解析会降低抓取速度
tcpdump输出解释
 tcpdump的Flags代表了这个数据包的用途,这些标记是TCP首部的内容
     [S] : SYN(开始连接)
     [S.]: SYN同步标识,以及确认[S]的ACK
     [P.] : PSH(推送数据)
     [F.] : FIN (结束连接)
     [R.] : RST(重置连接)
     [.] : 没有 Flag (意思是除上面四种类型外的其他情况,有可能是 ACK 也有可能是 URG:紧急指针)
      [FP.]: 标记FIN、PUSH、ACK组合,这样做是为了提升网络效率,减少数据来回确认等