【CentOS Linux 7】【Linux网络配置基础】

  1. 【CentOS Linux 7】实验1【VMware安装、新建虚拟机;63个基础命令运行结果图】
  2. 【CentOS Linux 7】实验2【Shell编程及应用】
  3. 【CentOS Linux 7】实验3【用户组群管理、磁盘分区及文件系统管理】
  4. 【CentOS Linux 7】实验4【Linux网络应用、Linux下C语言编程
  5. 【CentOS Linux 7】实验5【安装VScode,并用VScode编写HTML网页】

目   录

第1章 Linux网络配置基础

1 网络相关文件

1.1 /etc/sysconfig/network文件

1.2 /etc/sysconfig/network-scrips/ifcfg-eth0

1.3 其他网络相关文件

2 常用网络命令

2.1 ifconfig命令

2.3 ping命令

2.4 traceroute

2.5 netstat命令

2.6 tcpdump

3 网络端口

3.1 什么是端口

3.2 扫描之王nmap

3.3 端口的启动与关闭

4 网络启动与关闭

4.1 手工配置网络参数(static)

4.1.1在字符终端设置网络参数

4.1.2 在图形桌面环境下设置网络参数

4.2 自动获取网络参数(dhcp)

4.2.1 字符界面设置

4.2.2 图形界面设置

5 小结


1章 Linux网络配置基础

1 网络相关文件

要想熟练的配置linux网络,首先要了解和Linux网络相关配置文件。

1.1 /etc/sysconfig/network文件

首先来查看文件/etc/sysconfig/network的内容:

[root@localhost bin]# cat /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=localhost.localdomain

这里可以看出该文件就三句话,主要的功能是是否启动网络,第一句指的是默认启动IPV4网络,第二句是IPV6网络。第三句指的是设置主机名称。如果说要改变主机名,需要重新启动机器才能生效。因为这样才会让系统上面所有的程序都使用最新配置的主机名称。

1.2 /etc/sysconfig/network-scrips/ifcfg-eth0

这个文件是配置网卡参数的文件。里面可以配置IP、netmask、gateway、开机时的IP获取方式、是否在开机的时候启动等等。ifcfg-eth0指的是第一块网卡,而第二块网卡为ifcfg-eth1以此类推。其中ifcfg-lo指的是网络的回环地址。

[root@localhost bin]# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0           //网卡设备名称

BOOTPROTO=none     //是否使用DHCP方式获得网络参数,值可以是(none、static、dhcp)

HWADDR=00:0C:29:97:30:A8  //这就是常说的网卡硬件地址

ONBOOT=yes          //启动的时候是否激活网卡,值可以是(yes | no)

TYPE=Ethernet         //网卡的类型为以太网

USERCTL=no          //是否允许普通用户来控制该设备

IPV6INIT=no          //是否初始化IPV6

PEERDNS=yes     //yes使用DNS选项的值替代/etc/resolv.conf中的配置。如果使用 DHCP,yes 则为这个选项的默认,no不更改/etc/resolv.conf中的配置

NETMASK=255.255.255.0          //子网掩码

IPADDR=202.196.1.234            //IP地址

GATEWAY=202.196.1.193          //网关地址

1.3 其他网络相关文件

1/etc/resolv.conf

DNS功能是进行主机名称与 IP 的对应。而resolv.conf就是配置DNS IP地址的文件。

(2)/etc/hosts

该文件的主要作用是用来设置主机名与对应IP的。

(3)/etc/services

该文件记录了各种协议所使用的端口。例如httpftpsshtelnet等等服务所所使用的port number等等。

(4)/etc/protocols

该文件显示linux所支持的网络协议。例如常见的TCPUDP等等。

2 常用网络命令

2.1 ifconfig命令

(1)ifconfig命令

ifconfig主要是可以启动、观察与修改网卡的相关参数,可以修改的参数包括IP参数以及MTU等等都可以修改。

【例】:查看当前eth0网卡的参数。

[root@localhost ~]# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 00:0C:29:97:30:A8

          inet addr:202.196.1.234  Bcast:202.196.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe97:30a8/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:492965 errors:0 dropped:0 overruns:0 frame:0

          TX packets:12557 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:81685351 (77.9 MiB)  TX bytes:1772297 (1.6 MiB)

          Interrupt:67 Base address:0x2000

说明如下:

eth0:是网卡的代号,lo是回环网卡;HWaddr:MAC地址或者网卡地址;

inet addr表示IP地址;Bcast广播地址;Mask掩码;

inet6 addr:是IPv6地址;

MTU:就是最大传输单元;

RX:接收到的数据包,packets代表数据包数、errors代表数据包发生错误的数量、dropped 代表数据包由于有问题而遭丢弃的数量等等;

TX:发送的数据包,为网络由启动到目前为止的传送情况;

collisions:代表数据包碰撞的情况,如果发生太多次, 表示网络状况不太好;

Interrupt,Memory:IRQ地址与内存地址;

通过ifconfig命令,可以了解系统有几个网卡接口,每个网卡接口的参数配置,发送和接收了多少数据包等信息。

【例】:使用ifconfig命令来修改网卡参数。

[root@localhost ~]# ifconfig eth0 202.196.1.199

说明:该例修改网络的IP地址为202.196.1.199。

【例】:同时修改掩码及MTU

[root@localhost ~]# ifconfig eth0 202.196.1.199 netmask 255.255.255.193 mtu 2000

【例】:一张网卡配置两个IP地址。

[root@localhost ~]# ifconfig eth0:1 202.196.1.200

[root@localhost ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:97:30:A8

          inet addr:202.196.1.234  Bcast:202.196.1.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe97:30a8/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:497114 errors:0 dropped:0 overruns:0 frame:0

          TX packets:12956 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:82363124 (78.5 MiB)  TX bytes:1828577 (1.7 MiB)

          Interrupt:67 Base address:0x2000

 

eth0:1    Link encap:Ethernet  HWaddr 00:0C:29:97:30:A8

          inet addr:202.196.1.200  Bcast:202.196.1.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          Interrupt:67 Base address:0x2000

说明:这里可以看到两个网络接口,eth0和eth0:1,它们的硬件地址都是一样的。意思是它们其实是一张网卡,但是配置了两个不同的IP地址。

【例】:使用ifconfig启动网卡eth0。

[root@localhost ~]# ifconfig eth0 up

关闭网卡:

[root@localhost ~]# ifconfig eth0 down

    利用ifconfig命令修改网卡的参数需要注意,这里的修改都是暂时的,一旦网络重新启动后,这里所有修改的参数都是无效的。

【例】重新启动网络服务,ifconfig命令参数设置无效。

[root@localhost ~]# /etc/init.d/network restart

正在关闭接口 eth0:                                        [确定]

关闭环回接口:                                             [确定]

弹出环回接口:                                             [确定]

弹出界面 eth0:                                            [确定]

    重新启动后,在此利用ifconfig来查看网卡参数,会发现又恢复到了原始的参数。那么如果想要使修改的参数永久保存,需要直接在/etc/sysconfig/network-scripts/ifcfg-eth0文件中修改。修改完成后保存退出,重新启动网络即可生效。

2.3 ping命令

ping命令的主要作用是测试主机之间的连通性。其原理是通过发送ICMP数据包,根据返回值来判断网络的通信状况。

ping命令语法如下:

[root@localhost ~]# ping [-bct] IP

参数:

-b:后面接的是广播地址,用来测试整个网络的连通性;

-c:后面可以发送icmp数据包的个数;

-t :TTL 的数值,默认是 255,每经过一个节点就会少一;

【例】:测试一下202.196.0.1这台主机是否存在?利用[ctrl]+c来结束测试。

[root@localhost ~]# ping 202.196.0.1

PING 202.196.0.1 (202.196.0.1) 56(84) bytes of data.

64 bytes from 202.196.0.1: icmp_seq=1 ttl=124 time=36.1 ms

64 bytes from 202.196.0.1: icmp_seq=2 ttl=124 time=0.438 ms

64 bytes from 202.196.0.1: icmp_seq=3 ttl=124 time=0.775 ms

64 bytes from 202.196.0.1: icmp_seq=4 ttl=124 time=0.936 ms

64 bytes from 202.196.0.1: icmp_seq=5 ttl=124 time=1.18 ms

 

--- 202.196.0.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4003ms

rtt min/avg/max/mdev = 0.438/7.892/36.134/14.123 ms

说明:

64 bytes from 202.196.0.1: icmp_seq=1 ttl=124 time=36.1 ms含义:

64 bytes:表示这次发送的ICMP数据包大小为64 bytes;

icmp_seq=1:ICMP数据包的序号0;

ttl=243:每经过一个路由器或者网关就会减少1;

time=9.16 ms:响应时间;

rtt min/avg/max/mdev = 0.438/7.892/36.134/14.123 ms含义:

表示往返时延的最小、平均、最大及算数平均偏差值。

【例】:发送3个icmp数据包来测试202.196.1.235连通性。

[root@localhost ~]# ping -c 3 202.196.1.235

PING 202.196.1.235 (202.196.1.235) 56(84) bytes of data.

64 bytes from 202.196.1.235: icmp_seq=1 ttl=64 time=0.845 ms

64 bytes from 202.196.1.235: icmp_seq=2 ttl=64 time=1.04 ms

64 bytes from 202.196.1.235: icmp_seq=3 ttl=64 time=1.05 ms

 

--- 202.196.1.235 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2001ms

rtt min/avg/max/mdev = 0.845/0.982/1.055/0.100 ms

2.4 traceroute

那么有没有指令可以追踪两部主机之间通过的各个节点 (node) 通讯状况的好坏呢?举例来说,如果我们连接到 yahoo 的速度比平常慢,你觉得是 (1)自己的网络环境有问题? (2)还是外部的 Internet 有问题?如果是 (1) 的话,我们当然需要检查自己的网络环境啊, 看看是否又有谁中毒了?但如果是 Internet 的问题呢?那只有等等。

判断是 (1) 还是 (2) 就得要使用 traceroute 这个指令。

[root@linux ~]# traceroute [-nwig] IP

参数:

-n :可以不必进行主机的名称解析,单纯用 IP ,速度较快!

-w :若对方主机在几秒钟内没有回声就宣告不治...默认是 5 秒

-i :用在比较复杂的环境,如果你的网络接口很多很复杂时,才会用到这个参数;

     举例来说,你有两条 ADSL 可以连接到外部,那你的主机会有两个 ppp,

     你可以使用 -i 来选择是 ppp0 还是 ppp1!

-g :与 -i 的参数相仿,只是 -g 后面接的是 gateway 的 IP 就是了。

范例一:

[root@linux ~]# traceroute -n tw.yahoo.com

traceroute to tw.yahoo-ap1.akadns.net (203.84.202.164), 30 hops max, 38 byte packets

 1  61.59.121.1  42.174 ms  41.690 ms  41.058 ms

 2  139.175.172.2  40.962 ms  41.978 ms  40.973 ms

 3  192.72.122.130  40.983 ms  41.930 ms  41.003 ms

 4  139.175.58.210  42.956 ms  41.997 ms  42.337 ms

 5  139.175.58.153  47.591 ms  47.972 ms  48.748 ms

 6  139.175.56.30  48.193 ms  47.970 ms  47.986 ms

 7  139.175.57.94  47.959 ms  47.951 ms  47.985 ms

 8  139.175.56.138  48.363 ms  47.586 ms  47.995 ms

 9  139.175.58.42  49.256 ms  50.668 ms  47.490 ms

10  61.58.33.133  201.882 ms  201.565 ms  200.973 ms

11  61.58.33.50  199.910 ms  199.019 ms  198.961 ms

12  203.84.200.226  202.391 ms  202.567 ms  209.283 ms

这个 traceroute 挺有意思的,这个指令会针对欲连接的目的地之所有 router 进行 ICMP 的超时等待, 例如上面的例子当中,连接到 Yahoo 时,他会经过 12 个节点,traceroute 会主动的对这 12 个节点做 ICMP 的回声等待,并探测回复的时间,每个节点会探测三次。

所以像上头显示的结果,发现每个节点其实回复的时间大约在 200 ms 以内,算是还可以的 Internet 环境了。

而且由上面的信息来看,可以看出在 61.58.33.133 这个节点后的传输延迟较久,至于之前的 9 个节点则有不错的表现。通过这种解析,可以让您了解到这条连接是那个环节出了问题。

另外,如果在默认的 5 秒钟之内 traceroute 听不到节点的回声,那么屏幕上就会跑出一个*的符号, 告知该节点无法有顺利的回应。由于我们的 traceroute 用的是 ICMP 数据包,有些防火墙或者主机可能会将 ICMP 可通过的权力拿掉,因此就会造成等不到回声的状态!另外,有些 gateway 本来就不支持 traceroute 的功能,因此也会产生那个*的状况。所以分析时得要注意一下。

2.5 netstat命令

netstat命令主要的作用是用来观察网络连接及端口等信息。语法如下:

[root@linux ~]# netstat -[antulpc]

参数:

-n:不使用主机名称与服务名称,使用IP与port number;

-a:列出所有的连接状态;

-t:列出TCP的连接;

-u:列出UDP数据包的连接;

-l:列出处在监听状态的服务;

-p:列出PID与进程名;

-c:可以设置几秒钟后自动更新一次,例如-c 3每3秒更新一次网络状态的显示;

【例】列出目前的所有网络连接状态。

[root@localhost ~]# netstat -an

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State

tcp        0      0 0.0.0.0:23                  0.0.0.0:*                   LISTEN

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN

tcp        0      0 :::22                       :::*                        LISTEN

udp        0      0 0.0.0.0:32768               0.0.0.0:*

udp        0      0 0.0.0.0:10000               0.0.0.0:*

Active UNIX domain sockets (servers and established)

Proto RefCnt Flags       Type       State         I-Node Path

unix  2      [ ACC ]     STREAM     LISTENING     11497  @/tmp/fam-root-

unix  2      [ ACC ]     STREAM     LISTENING     8405   @/var/run/hald/dbus-1wf2PTHPKi

省略部分

说明:

上半部分的输出为TCP和UDP连接,下半部分为UNIX socket连接。

Local Address:本机地址,是IP或者主机名称,接着是端口号。例如我们可以看到本机开放了22、23、25号端口等。

Foreign Address:远程主机IP与端口。

stat:状态。ESTABLISED:已经建立连接;LISTEN:处于监听状态。

【例】查看网络中正在处于监听状态的连接。

[root@localhost ~]# netstat -tulpn

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address     Foreign Address      State     PID/Program name

tcp        0      0 0.0.0.0:111        0.0.0.0:*           LISTEN      2403/portmap

tcp        0      0 0.0.0.0:23         0.0.0.0:*           LISTEN      2671/xinetd

tcp        0      0 127.0.0.1:2207     0.0.0.0:*           LISTEN      2633/python

tcp        0      0 :::22              :::*                LISTEN      2659/sshd

上面最重要的其实是那个-l参数,因为可以仅列出有在监听状态的端口。

【例】观察本机所有的网络连接状态

[root@localhost ~]# netstat -atupn

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address    Foreign Address      State       PID/Program name

tcp        0      0 127.0.0.1:2208   0.0.0.0:*            LISTEN      2628/hpiod

tcp        0      0 0.0.0.0:111      0.0.0.0:*            LISTEN      2403/portmap

tcp        0      0 0.0.0.0:10000    0.0.0.0:*            LISTEN      2930/perl

tcp        0      0 0.0.0.0:918      0.0.0.0:*            LISTEN      2432/rpc.statd

tcp        0      0 0.0.0.0:23       0.0.0.0:*            LISTEN      2671/xinetd

tcp        0      0 127.0.0.1:631    0.0.0.0:*            LISTEN      2645/cupsd

tcp        0      0 :::22            :::*                 LISTEN      2659/sshd

tcp        0    148 202.196.1.234:22  202.196.1.235:24624  ESTABLISHED 3266/1

udp        0      0 0.0.0.0:111       0.0.0.0:*                       2403/portmap

说明:可以看到目前远程的其中有一条连接正处于连接建立的状态,该连接表示从远程的主机202.196.1.235的24624端口连接到本机的202.196.1.234:22端口,在内存中该连接的进程号为3266。

2.6 tcpdump

tcpdump可以从网卡截获数据包,如果该数据包传输过程中,没有加密的话,可以解析出数据包的内容,而默认情况下,网络中采用IP协议的数据包是明文传输的,所以可以直接解析。其语法如下:

[root@localhost ~]# tcpdump [-nn] [-i 网卡名] [-w 文件名] [-c 次数] [-X] [提取所需要的数据包]

说明:

-nn:用IP及端口号来显示;

-i:想要截获哪个网卡的数据包,如eth0,lo等;

-w:把截获的数据包存到指定的文件中;

-c:截获的数据包的数目,如果不指定,那么tcpdump会一直截获,直到用户输入[ctrl]+c为止;

-X:显示十六制以及ASCII内容的数据包;

[提取所需要的数据包]:可以从所有捕获的数据包中提取自己希望得到的数据包:

比如:

'host 202.196.1.235' :只获取来自202.196.1.235的数据包

'tcp port 21':只截获21号端口的tcp数据包;

更详细的用法请参考man tcpdump。

【例】捕获网卡eth0上的数据包。输入[ctrl]+c结束捕获。

[root@localhost ~]# tcpdump -i eth0 –nn

14:34:54.347408 IP 202.196.1.235.24624 > 202.196.1.234.22: . ack 102764 win 7632

14:34:54.347511 IP 202.196.1.234.22 > 202.196.1.235.24624: P 103340:103488(148) ack 273 win 447

省略

844 packets captured           //总共捕获了多少个数据包

2076 packets received by filter //过滤后得到的数据包的总数目

295 packets dropped by kernel   //内核丢弃的数据包

捕获的数据包显示格式说明,比如第一行:

14:34:54.347408:数据包被捕获的时间;

IP 202.196.1.235.24624 >:发送发是202.196.1.235端口号是24624,该数据报是IP数据包。

202.196.1.234.22:接收方的IP是202.196.1.234,接收方的端口是22;

P 103340:103488(148):PUSH传输,传输的数据是整个数据流中的第103340字节到103488字节,所以该数据包的大小为148个字节;

ack 273 win 447:ACK确认帧与tcp窗口的大小;

【例】用tcpdump捕获网卡lo上的23号端口上数据包,来解释tcp三次握手机制。

(1)打开一个终端,首先输入命令tcpdump -i lo –nn来监听23号端口上的数据包。

[root@localhost ~]# tcpdump -i lo -nn port 23

(2)另外新建一个终端,输入命令telnet 127.0.0.1,用来telnet本机。

[root@localhost ~]# telnet 127.0.0.1

(3)我们就会在步骤(1)的终端内看到如下所示的捕获到的数据包:

[root@localhost ~]# tcpdump -i lo -nn port 23

第1行tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

第2行listening on lo, link-type EN10MB (Ethernet), capture size 96 bytes

第3行15:00:34.778721 IP 127.0.0.1.41280 > 127.0.0.1.23: S 4028806550:4028806550(0) win 32792 <mss 16396,sackOK,timestamp 66289322 0,nop,wscale 7>

第4行15:00:34.779274 IP 127.0.0.1.23 > 127.0.0.1.41280: S 4027279237:4027279237(0) ack 4028806551 win 32768 <mss 16396,sackOK,timestamp 66289322 66289322,nop,wscale 7>

第5行15:00:34.780010 IP 127.0.0.1.41280 > 127.0.0.1.23: . ack 1 win 257 <nop,nop,timestamp 66289322 66289322>

第6行15:00:34.780392 IP 127.0.0.1.41280 > 127.0.0.1.23: P 1:34(33) ack 1 win 257 <nop,nop,timestamp 66289323 66289322>

说明:

第3行是来自客户端的带有SYN主动连接表示的数据包,也就是tcp连接建立中的第一次握手。

第4行是服务器端的带有ACK标示的SYN连接数据包,也就是tcp连接建立中的第二次握手。

第5行则是客户端给服务器端的(ACK),表示该连接正式建立,也就是tcp连接建立中的第三次握手。

第6行以后就开始了tcp连接的数据传输阶段。

3 网络端口

3.1 什么是端口

如果把IP地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536个之多。端口是通过端口号来标记的,端口号只有整数,范围是从0到65535。

在Internet上,各主机间通过TCP/IP协议发送和接收数据包,各个数据包根据其目的主机的ip地址来进行互联网络中的路由选择。可见,把数据包顺利的传送到目的主机是没有问题的。问题出在哪里呢?我们知道大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据包传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。

本地操作系统会给那些有需求的进程分配协议端口(protocol port,即我们常说的端口),每个协议端口由一个正整数标识,如:80,139,445,等等。当目的主机接收到数据包后,将根据报文首部的目的端口号,把数据发送到相应端口,而与此端口相对应的那个进程将会领取数据并等待下一组数据的到来。

端口其实就是队,操作系统为各个进程分配了不同的队,数据包按照目的端口被推入相应的队中,等待被进程取用,在极特殊的情况下,这个队也是有可能溢出的,不过操作系统允许各进程指定和调整自己的队的大小。

不光接受数据包的进程需要开启它自己的端口,发送数据包的进程也需要开启端口,这样,数据包中将会标识有源端口,以便接受方能顺利地回传数据包到这个端口。

根据提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。

那么,如果攻击者使用软件扫描目标计算机,得到目标计算机打开的端口,也就了解了目标计算机提供了哪些服务。我们都知道,提供服务就一定有服务软件的漏洞,根据这些,攻击者可以达到对目标计算机的初步了解。

网络通信的基础是建立在套接字的基础上的,套接字指的是由(客户端IP:端口,服务器IP:端口)构成。

◆服务器方端口的选择:

服务器端的端口都是固定的,例如FTP服务默认使用21号端口、WWW服务器使用80号端口、电子邮件服务器使用25号端口、TELNET服务器默认使用23号端口等等。这些端口一般都小于1024,称为熟知端口。

◆客户端端口号的选择:

客户端的端口号是随机生成的,一般都大于1024。

◆小于1024的端口:

小于1024的端口,都是需要以root的身份才能启动的, 这些端口主要是用于一些常见的服务,在Linux系统下,常见的协议与端口的对应在/etc/services文件中。

◆端口的安全性:

有人曾经把服务器比作房子,而把端口比作通向不同房间(服务)的门。入侵者要占领这间房子,势必要破门而入,那么对于入侵者来说,了解房子开了几扇门,都是什么样的门,门后面有什么东西就显得至关重要。入侵者通常会用扫描器对目标主机的端口进行扫描,以确定哪些端口是开放的,从开放的端口,入侵者可以知道目标主机大致提供了哪些服务,进而猜测可能存在的漏洞,因此对端口的扫描可以帮助我们更好的了解目标主机,而对于管理员,扫描本机的开放端口也是做好安全防范的第一步。Linux系统中,常用的端口扫描工具是nmap,号称扫描之王。(使用nmap需要注意,随意扫描别人的主机是违法的)

3.2 扫描之王nmap

查看端口的命令主要有两个,一个是netstat,用来查看本机的端口,另一个是扫描之王nmap,用来查看其他主机的端口。

(1)Netstat的用法在前面小节中已经介绍过,更详细的用法使用:

[root@localhost ~]# man netstat

【例】:查看系统是否启动23号端口。

[root@localhost ~]# netstat -tulpn |grep 23

tcp      0      0 0.0.0.0:23      0.0.0.0:*       LISTEN      2671/xinetd

说明系统已经正确的启动了23号端口,也就是我们通常所说的服务器端已经启动了telnet服务,可以在客户端使用telnet远程连接到服务器上进行远程操作。

(2)nmap扫描其他主机端口

nmap是一个网络探测和安全扫描程序,系统管理者和个人可以使用这个软件扫描大型的网络,获取那台主机正在运行以及提供什么服务等信息。nmap支持很多扫描技术,例如:UDP、TCP connect()、TCP SYN(半开扫描)、ftp代理(bounce攻击)、反向标志、ICMP、FIN、ACK扫描、圣诞树(Xmas Tree)、SYN扫描和null扫描。nmap还提供了一些高级的特征,例如:通过TCP/IP协议栈特征探测操作系统类型,秘密扫描,动态延时和重传计算,并行扫描,通过并行ping扫描探测关闭的主机,诱饵扫描,避开端口过滤检测,直接RPC扫描(无须端口影射),碎片扫描,以及灵活的目标和端口设定。

nmap运行通常会得到被扫描主机端口的列表。nmap总会给出wellknown端口的服务名(如果可能)、端口号、状态和协议等信息。每个端口的状态有:open、filtered、unfiltered。

open状态意味着目标主机能够在这个端口使用

accept()系统调用接受连接。

filtered状态表示:防火墙、包过滤和其它的网络安全软件掩盖了这个端口,禁止 nmap探测其是否打开。

unfiltered表示:这个端口关闭,并且没有防火墙/包过滤软件来隔离nmap的探测企图。通常情况下,端口的状态基本都是unfiltered状态,只有在大多数被扫描的端口处于filtered状态下,才会显示处于unfiltered状态的端口。

根据使用的功能选项,nmap也可以报告远程主机的下列特征:使用的操作系统、TCP序列、运行绑定到每个端口上的应用程序的用户名、DNS名、主机地址是否是欺骗地址、以及其它一些东西。

默认情况下linux系统已经安装好了nmap软件,可以直接使用,该命令的语法非常复杂,其功能也非常强大,号称扫描之王。如果对于网络安全和网络扫描有兴趣,可以详细的了解一下,这里只简单的介绍一下如何使用。

语法如下:

[root@linux ~]# nmap [扫瞄方式] [扫瞄参数] [主机地址]

参数:

[扫瞄方式]:

    -sT:TCP connect()扫描

    -sS:TCP同步扫描(TCP SYN)

    -sP:ping扫描

    -sU:UDP扫描

    -sA:ACK扫描

[扫瞄参数]:主要的扫瞄参数有几种:

    -PT:扫描之前,使用TCP ping确定哪些主机正在运行

    -PI:让nmap使用真正的ping(ICMP echo请求)来扫描目标主机是否正在运行

    -O:这个选项激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志

[主机地址]:被扫描的主机IP。

【例】扫描本机所开放的端口。

[root@localhost ~]# nmap localhost

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-01-10 20:09 CST

Interesting ports on localhost.localdomain (127.0.0.1):

Not shown: 1673 closed ports

PORT      STATE SERVICE

22/tcp    open  ssh

23/tcp    open  telnet

25/tcp    open  smtp

111/tcp   open  rpcbind

631/tcp   open  ipp

918/tcp   open  unknown

10000/tcp open  snet-sensor-mgmt

Nmap finished: 1 IP address (1 host up) scanned in 0.175 seconds

说明,默认情况下nmap只扫描tcp协议开放的端口。如果想要了解UDP开放的端口。可以使用如下的命令。

[root@localhost ~]# nmap -sTU localhost

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-01-10 20:11 CST

Interesting ports on localhost.localdomain (127.0.0.1):

Not shown: 3155 closed ports

PORT      STATE         SERVICE

22/tcp    open          ssh

23/tcp    open          telnet

25/tcp    open          smtp

111/tcp   open          rpcbind

631/tcp   open          ipp

918/tcp   open          unknown

10000/tcp open          snet-sensor-mgmt

111/udp   open|filtered rpcbind

631/udp   open|filtered unknown

912/udp   open|filtered unknown

915/udp   open|filtered unknown

32768/udp open|filtered omad

Nmap finished: 1 IP address (1 host up) scanned in 1.475 seconds

【例】扫描探测IP地址为202.196.1.235的主机的操作系统的相关信息。

[root@localhost ~]# nmap -O 202.196.1.235

Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2012-01-10 20:23 CST

Warning:  OS detection will be MUCH less reliable because we did not find at least 1 open and 1 closed TCP port

Interesting ports on client1 (202.196.1.235):

Not shown: 1675 filtered ports

PORT     STATE SERVICE

135/tcp  open  msrpc

139/tcp  open  netbios-ssn

445/tcp  open  microsoft-ds

912/tcp  open  unknown

3389/tcp open  ms-term-serv

MAC Address: 00:0F:EA:02:4A:BC (Giga-Byte Technology Co.)

Device type: general purpose|firewall

Running (JUST GUESSING) : Microsoft Windows NT/2K/XP|2003/.NET (93%), Linux 2.4.X (87%), Symantec embedded (87%), Apple Mac OS X 10.3.X (86%), Compaq Tru64 UNIX 4.X (86%), IBM AIX 4.X (85%)

Aggressive OS guesses: Microsoft Windows XP SP2 (93%), Astaro Security Linux 4 (Kernel 2.4.19) (87%), Microsoft Windows XP SP1 or Windows 2000 SP3 (87%), Symantec Gateway Security 5310 Firewall (87%), Symantec Gateway Security 5420 firewall (87%), Apple Mac OS X 10.3.6 or 10.3.7 (86%), Tru64 UNIX 4.0f - 4.0g (86%), Microsoft Windows 2003 Server or XP SP2 (86%), Microsoft Windows 2000 SP3 (86%), Microsoft Windows XP SP1 (86%)

No exact OS matches for host (test conditions non-ideal).

Nmap finished: 1 IP address (1 host up) scanned in 32.455 seconds

通过这个示例可以看到nmap可以探测到202.196.1.235的开放的端口,猜测操作系统的信息等。

3.3 端口的启动与关闭

所谓的端口的启动与关闭,实质上指的是端口对应的服务的启动与关闭。例如我们想要启动与关闭80号端口,具体操作如下:

【例】启动httpd服务,也就是启动了80号端口,关闭httpd服务,也就是关闭了80号端口。

[root@localhost ~]# /etc/init.d/httpd start

启动 httpd:                                               [确定]

[root@localhost ~]# netstat -tulpn |grep 80

tcp        0      0 :::80          :::*         LISTEN      6550/httpd

[root@localhost ~]# /etc/init.d/httpd stop

停止 httpd:                                               [确定]

[root@localhost ~]# netstat -tulpn |grep 80

[root@localhost ~]#

一般情况下,主机只开放必要的端口,因为多开放一个端口,就多了一个入侵主机的通道,所以从安全的角度来讲,尽可能的关闭不需要的服务。

4 网络启动与关闭

4.1 手工配置网络参数(static)

在Linux系统安装好以后,需要适当的设置网络参数,然后才能正常的连接Internet。在局域网的环境中,常见的网络参数的设置有两种方式:一种是手工的静态的设置网络参数。另一种是局域网中有DHCP服务器,这样就可以自动的获取网络参数。下面的小节中会详细的分析这两种方式下如何设置网络参数。

首先,来看如何静态的配置网络参数:

4.1.1在字符终端设置网络参数

(1)首先可以设置主机名称:/etc/sysconfig/network

[root@localhost ~]# vi /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=yes

HOSTNAME=localhost.localdomain          //这里可以更改主机名称

需要注意,如果更改了主机名称,最好重新启动Linux系统,以便主机名生效。

(2)设置DNS服务器地址:/etc/resolv.conf

[root@localhost ~]# vi /etc/resolv.conf

nameserver 202.196.0.1

设置DNS服务器IP的目的是当访问Internet时可以使用域名。而不是仅仅使用IP。

(3)设置IP地址等参数:/etc/sysconfig/network-scripts/ifcfg-eth0

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=none

NETMASK=255.255.255.0

IPADDR=202.196.1.234

GATEWAY=202.196.1.193

该文件中各参数的含义前面已经介绍过,这里需要注意的是需要正确的配置IP地址,掩码及网关地址。其中BOOTPROTO设置为none,表示用手工的方式来配置。

(4)重新启动网络。

配置完成以后需要重新启动网络,这样刚才的设置的网络参数就生效了。重新启动网络的方式如下:

[root@localhost ~]# /etc/init.d/network restart

正在关闭接口 eth0:                                        [确定]

关闭环回接口:                                             [确定]

弹出环回接口:                                             [确定]

弹出界面 eth0:                                            [确定]

(5)测试网路联通性。

测试网关的连通性:

[root@localhost ~]# ping -c 2 202.196.1.193

PING 202.196.1.193 (202.196.1.193) 56(84) bytes of data.

64 bytes from 202.196.1.193: icmp_seq=1 ttl=255 time=8.74 ms

64 bytes from 202.196.1.193: icmp_seq=2 ttl=255 time=3.97 ms

测试局域网中其他主机的连通性:

[root@localhost ~]# ping -c 2 202.196.1.235

PING 202.196.1.235 (202.196.1.235) 56(84) bytes of data.

64 bytes from 202.196.1.235: icmp_seq=1 ttl=64 time=0.121 ms

64 bytes from 202.196.1.235: icmp_seq=2 ttl=64 time=0.955 ms

测试DNS服务器能否正确的解析域名:

[root@localhost ~]# nslookup www.zzuli.edu.cn

Server:         202.196.0.1

Address:        202.196.0.1#53

Name:   www.zzuli.edu.cn

Address: 192.168.99.7

如果这里的几个测试都没有问题,这样主机就可以顺利的访问Internet了。

4.1.2 在图形桌面环境下设置网络参数

找到系统—>管理—>网络:首先点击“DNS”选项卡,在如下所示的界面中设置主机名和DNS服务器IP地址。

   

然后点击“设备”选项卡,选中“eth0”,点击“编辑”按钮。

正确设置在界面中设置IP地址、子网掩码、网关地址。然后点击确定。最后在各种参数都设置完成后,点击“激活”按钮。这样网络配置就完成了。接下来就可以参考上一个小节参数网络的连通性了。

4.2 自动获取网络参数(dhcp)

       如果主机处在局域网中,并且局域网中已经有一台DHCP服务器,那么设置网络就非常简单了,linux作为客户端,网络设置方式如下:

4.2.1 字符界面设置

(1)设置主机名同4.1节相同。

(2)设置网络参数/etc/sysconfig/network-scripts/ifcfg-eth0

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=dhcp

只需要设置三个项目即可。

(3)重新启动网络方式见4.1节。

(4)测试连通性见4.1节。

4.2.2 图形界面设置

具体见4.1节,在这里选择“自动获取IP地址”即可,然后激活网络。

5 小结

本章主要介绍了网络中常用的命令和网络参数有关的几个文件的基础上,描述了网络端口相关概念和操作,最后给出了Linux主机正确的网络配置的方法。使读者对Linux的网络有了一个清晰的认识。

这是一门linux下c++通讯架构实战课程,针对c/c++语言已经掌握的很熟并希望进一步深造以将来用c++在linux下从事网络通讯领域/网络服务器的开发和架构工作。 这门课程学习难度颇高但也有着极其优渥的薪水(最少30K月薪,最高可达60-80K月薪),这门课程,会先从nginx源码的分析和讲解开始,逐步开始书写属于自己的高性能服务器框架代码,完善个人代码库,这些,将会是您日后能取得高薪的重要筹码。 本课程原计划带着大家逐行写代码,但因为代码实在过于复杂和精细,带着写代码可能会造成每节课至少要4~5小时的超长时间,所以老师会在课前先写好代码,主要的时间花费在逐行讲解这些代码上,这一点望同学们周知。如果你觉得非要老师领着写代码才行的话,老师会觉得你当前可能学习本门课程会比较吃力,请不要购买本课程,以免听不懂课程并给老师差评,差评也会非常影响老师课程的销售并造成其他同学的误解。 这门课程要求您具备下面的技能: (1)对c/c++语言掌握的非常熟练,语言本身已经不是继续学习的障碍,并不要求您一定熟悉网络或者linux; (2)对网络通讯架构领域有兴趣、勇于挑战这个高难度的开发领域并期望用大量的付出换取高薪; 在这门课程中,实现了一个完整的项目,其中包括通讯框架和业务逻辑框架,浓缩总结起来包括如下几点: (1)项目本身是一个极完整的多线程高并发的服务器程序; (2)按照包头包体格式正确的接收客户端发送过来的数据包, 完美解决收包时的数据粘包问题; (3)根据收到的包的不同来执行不同的业务处理逻辑; (4)把业务处理产生的结果数据包正确返回给客户端; 本项目用到的主要开发技术和特色包括: (1)epoll高并发通讯技术,用到的触发模式是epoll中的水平触发模式【LT】; (2)自己写了一套线程池来处理业务逻辑,调用适当的业务逻辑处理函数处理业务并返回给客户端处理结果; (3)线程之间的同步技术包括互斥量,信号量等等; (4)连接池中连接的延迟回收技术,这是整个项目中的精华技术,极大程度上消除诸多导致服务器程序工作不稳定的因素; (5)专门处理数据发送的一整套数据发送逻辑以及对应的发送线程; (6)其他次要技术,包括信号、日志打印、fork()子进程、守护进程等等;
©️2020 CSDN 皮肤主题: 终极编程指南 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值