Linux学习整理-网络命令集

2023-11-05

目录

前提

1. 机器IP地址查询

1.1 ifconfig

1.1.1 安装包

1.1.2 执行命令

1.1.3 拓展-ifconfig的其它用法

1.1.4 常用的属性说明

1.2 ip addr

1.2.1 查看IP地址

1.2.2 其它用法

1.3 hostname -I 

1.3.1 查看IP地址

1.3.2 其它用法

2 网络通信状态查询

2.1 ping

 2.2 traceroute

3 DNS解析

3.1 nslookup

3.2 dig

4 端口状态查询

4.1 netstat

4.2 ss

4.3 lsof

4.4 nc

4.4.1 监听端口

4.4.2 扫描端口

4.4.3 传输文件 聊天

5 其它

5.1 curl

5.2 tcpdump

6 Linux的网络相关的文件


前提

Linux系统,不同的版本可能会有差异,下面是本人用的版本。

ubuntu版本

root@node2:~# cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

centos版本

[root@centos ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

1. 机器IP地址查询

确认自己机器的IP地址 ,有下面的几种方式

1.1 ifconfig

跟windows的ipconfig很像,可以查看自己机器的ip地址,但是实际上列出的是机器上所有网卡的信息,系统安装的版本原因,可能系统本身不会带有这个命令。

1.1.1 安装包

  • centos可以用yum provides ifconfig查找这个命令属于哪个包
#查找ifconfig所在的package
[root@centos ~]# yum provides ifconfig
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
net-tools-2.0-0.25.20131004git.el7.x86_64 : Basic networking tools
Repo        : @base
Matched from:
Filename    : /usr/sbin/ifconfig

#安装
[root@centos ~]# yum install net-tools -y
  • ubuntu可以直接执行ifconfig,然后系统会提示如何安装
root@node2:~# ifconfig

Command 'ifconfig' not found, but can be installed with:

apt install net-tools

# 安装
root@node2:~# apt install net-tools

1.1.2 执行命令

可以看到两个网卡,一个是ens33 也就是本地的网卡,本机的IP地址是192.168.0.203,子网掩码是255.255.255.0,广播地址是192.168.0.255。还有一个是lo,也就是本地回环地址,IP是127.0.0.1。

root@node2:~# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.203  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 240f:73:1e6d:1:20c:29ff:fe42:c352  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::20c:29ff:fe42:c352  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:42:c3:52  txqueuelen 1000  (Ethernet)
        RX packets 247578  bytes 235754869 (235.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 59994  bytes 5649270 (5.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 849  bytes 78675 (78.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 849  bytes 78675 (78.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

1.1.3 拓展-ifconfig的其它用法

下面的这些命令慎用,如果是用ssh登录的情况下,可能会切断你的连接。

# 启动ens33网卡
ifconfig ens33 up
# 关闭ens33网卡
ifconfig ens33 down
# 给ens33网卡分配IP地址
ifconfig ens33 192.168.0.xxx

# ens33网卡追加新的IP地址
ifconfig add ens33 192.168.0.xxx
# ens33网卡删除IP地址
ifconfig del ens33 192.168.0.xxx

1.1.4 常用的属性说明

  • 操作用的属性

通过

man ifconfig

或者

ifconfig -h

可以查看到下面的属性用法

属性 解释
up 启动网卡
down 停止网卡
add 增加IP地址到网卡
del 从网卡删除IP地址
mtu  设置网卡的mtu(最大转送单位)
netmask 设置网卡的子网掩码
hw ether  设置物理地址(MAC地址)
  • 表示用的属性
属性 解释
-a 表示所有的网卡信息(包括已经down的网卡)
-s 简单表示网卡的通信状况

1.2 ip addr

ip命令是现在大多数版本linux自带的命令,被用来替代ifconfig。

1.2.1 查看IP地址

[root@centos ~]# ip addr
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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:07:cf:68 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.211/24 brd 192.168.0.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet6 240f:73:1e6d:1:8441:716a:d14:3b9c/64 scope global noprefixroute dynamic 
       valid_lft 266sec preferred_lft 266sec
    inet6 fe80::ba3e:8d0:5cc3:c7e3/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

1.2.2 其它用法

用法

ip [option] object [subcommand]

详细的内容用下面的命令去查询

man ip

  •  属性说明
短属性 长属性 解释
-4 IPv4
-6 IPv6
-B bridge
-b file -batch file 从文件读取命令
-s -stats、-statistics 显示详细情报
-o -oneline 显示内容变成一行  用/ 替代换行 
-r -resolve 显示dns名

 例如

[root@centos ~]# ip -4 -o a
1: lo    inet 127.0.0.1/8 scope host lo\       valid_lft forever preferred_lft forever
2: ens33    inet 192.168.0.211/24 brd 192.168.0.255 scope global noprefixroute ens33\       valid_lft forever preferred_lft forever

 对象说明

网络相关的内容(待整理)

对象 别名 解释
link l 网络设备
addr a、address ip地址
addrlabel addrl
route r
rule rul
neigh n、neighbour
ntable nt、ntb
tunnel t
tuntap tu
maddr m、ma、mad
mroute mr
mrule mru
monitor mon
xfrm x、xf
netns net
l2tp l2
tcp_metrics tcp_m、tcp_metrics、tcpm
token tok

ip command的命令很强大,有兴趣懂网络的可以自己研究一下。

比如跟ifconfig一样的功能

# ens33网卡追加新的IP地址
ip addr add 192.168.0.xxx dev ens33

# 从ens33网卡删除IP地址
ip addr del 192.168.0.xxx dev ens33

1.3 hostname -I 

hostname 

就是看本机的机器名的。还附带别的功能。

注意:这个命令 不像前两个命令可以看到网卡信息,只是单纯的看IP地址

1.3.1 查看IP地址

[root@centos ~]# hostname -i
fe80::ba3e:8d0:5cc3:c7e3%ens33 240f:73:1e6d:1:8441:716a:d14:3b9c%2 192.168.0.211
[root@centos ~]# hostname -I
192.168.0.211 240f:73:1e6d:1:8441:716a:d14:3b9c 

1.3.2 其它用法

临时设定hostname,重启后失效。

[root@centos ~]# hostname
centos
[root@centos ~]# hostname centos02
[root@centos ~]# hostname
centos02

用法比较简单,用hostname -h 就可以看到所有的用法,或者用man hostname就可以用到更多的信息。

如果要永久修改hostname的话,用hostnamectl, 可以看到连配置文件都发生变更了

[root@centos ~]# hostnamectl set-hostname centos02
[root@centos ~]# hostname
centos02
[root@centos ~]# cat /etc/hostname 
centos02
[root@centos ~]# 

2 网络通信状态查询

2.1 ping

ping 跟windows 一样 ,可以用来确认网络连接的状态和应答速度。

但是要注意的是,可以ping通,不代表你可以访问对方机器,ping不通,也不代表你肯定可以访问对方机器。

ping命令走的是ICMP协议,是网络层的协议。跟端口什么的没有关系。

[root@centos ~]# ping 192.168.0.1 -c 4
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=2.48 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=255 time=3.38 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=255 time=8.78 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=255 time=3.32 ms

--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3012ms
rtt min/avg/max/mdev = 2.480/4.492/8.782/2.502 ms

 2.2 traceroute

查询网络的路由路径

 这个命令不是自带命令,centos用yum provides traceroute, ubuntu自带提示。

安装完后可以执行命令了,可以看到从本机到google经过的路由地址。

[root@centos ~]# traceroute google.com -4
traceroute to google.com (172.217.26.238), 30 hops max, 60 byte packets
 1  gateway (192.168.0.1)  2.985 ms  3.900 ms  3.738 ms
 2  sjkBBAR006-1.bb.kddi.ne.jp (111.87.254.17)  10.775 ms  14.363 ms  14.200 ms
 3  sjkBBAC07.bb.kddi.ne.jp (27.85.214.221)  11.480 ms sjkBBAC07.bb.kddi.ne.jp (182.248.174.125)  13.813 ms sjkBBAC07.bb.kddi.ne.jp (27.86.126.237)  13.630 ms
 4  27.85.132.69 (27.85.132.69)  15.890 ms 27.80.241.125 (27.80.241.125)  15.739 ms 27.80.241.133 (27.80.241.133)  15.506 ms
 5  27.86.120.218 (27.86.120.218)  12.840 ms 106.139.192.102 (106.139.192.102)  15.053 ms 27.86.120.22 (27.86.120.22)  14.908 ms
 6  72.14.242.21 (72.14.242.21)  14.755 ms  11.571 ms  10.071 ms
 7  * * *
 8  72.14.233.34 (72.14.233.34)  10.347 ms 142.250.226.60 (142.250.226.60)  13.171 ms 108.170.242.193 (108.170.242.193)  13.081 ms
 9  108.170.242.209 (108.170.242.209)  13.003 ms 108.170.242.208 (108.170.242.208)  11.917 ms 108.170.242.176 (108.170.242.176)  12.787 ms
10  bom05s09-in-f14.1e100.net (172.217.26.238)  12.704 ms 209.85.249.241 (209.85.249.241)  13.103 ms bom05s09-in-f14.1e100.net (172.217.26.238)  12.993 ms

3 DNS解析

3.1 nslookup

跟windows的nslookup一样,可以把domain名解析成IP地址。

使用方法很简单。

 可以看到通过DNS服务器[2001:268:fd07:4::1] 把www.baidu.com的域名解析成IP地址。

  1. 根据CNAME Record把www.baidu.com解析成www.a.shifen.com
  2. 根据CNAME Record把www.a.shifen.com解析成www.wshifen.com
  3. 根据A Record把www.wshifen.com解析成119.63.197.151和119.63.197.139
[root@centos ~]# nslookup www.baidu.com
Server:		2001:268:fd07:4::1
Address:	2001:268:fd07:4::1#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
www.a.shifen.com	canonical name = www.wshifen.com.
Name:	www.wshifen.com
Address: 119.63.197.151
Name:	www.wshifen.com
Address: 119.63.197.139

注意:有时候能ping通IP地址,却不能解析域名,就是因为DNS服务器的设置有问题。

/etc/resolv.conf  文件里 就是DNS服务器的设置。

但是要注意不能直接修改这个文件,而且ubuntu和centos的修改方式不一样。

[root@centos ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
nameserver 2001:268:fd07:4::1
nameserver 2001:268:fd08:4::1

3.2 dig

这个命令不是系统自带的,需要自己安装。安装方式跟前面的几个命令一样,不再赘述。

 使用方式

[root@centos ~]# dig www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.8 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5053
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com.			IN	A

;; ANSWER SECTION:
www.baidu.com.		917	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	223	IN	CNAME	www.wshifen.com.
www.wshifen.com.	170	IN	A	119.63.197.151
www.wshifen.com.	170	IN	A	119.63.197.139

;; Query time: 15 msec
;; SERVER: 2001:268:fd07:4::1#53(2001:268:fd07:4::1)
;; WHEN: Wed Jan 05 23:07:27 JST 2022
;; MSG SIZE  rcvd: 127

4 端口状态查询

4.1 netstat

Netstat 命令用于打印网络连接(network connections),路由表(routing tables),接口统计信息 (Interface Statistics),伪装连接(masquerade connections) ,多播成员资格 (Multicast Memberships) 。

端口占用情况调查

命令格式:

netstat   [address_family_options]   [--tcp|-t]   [--udp|-u]   [--udplite|-U]   [--sctp|-S]  [--raw|-w]  [--listening|-l]  [--all|-a]
       [--numeric|-n] [--numeric-hosts] [--numeric-ports] [--numeric-users] [--symbolic|-N] [--extend|-e[--extend|-e]] [--timers|-o] [--pro‐
       gram|-p] [--verbose|-v] [--continuous|-c] [--wide|-W] [delay]

下面的协议,有很多可能系统不支持,主要记住ipv4和ipv6就可以了。 

address_family_options:

[-4|--inet] --------------------------------------------------------------------------------------IPv4

[-6|--inet6]  -----------------------------------------------------------------------------------IPv6

[--protocol={inet,inet6,unix,ipx,ax25,netrom,ddp, ... } ]-----------------------各种协议

[--unix|-x] [--inet|--ip|--tcpip] [--ax25] [--x25][--rose] [--ash] [--ipx] [--netrom] [--ddp|--appletalk] [--econet|--ec]-----------------------各种协议

 tcp

# 属性[-t] 代表tcp 已经确立连接的tcp端口列表
[root@centos ~]# netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0     36 centos:ssh              192.168.0.13:58026      ESTABLISHED

# 属性[-l] 监听中的tcp端口列表
[root@centos ~]# netstat -tl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN 

# 属性[-n] 端口和host全部变成数字(跟上面的列表一样,但是表示的是数字)
# 监听中的tcp端口列表
[root@centos ~]# netstat -ntl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN  

 udp

[root@centos ~]# netstat -nul
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 127.0.0.1:323           0.0.0.0:*                          
udp6       0      0 ::1:323                 :::*    

还有很多别的用法

比如说 -4 只显示ipv4,-6 只显示ipv6,上面的命令格式可以自由组合来打印自己需要的内容

[root@centos ~]# netstat -ntl4
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN 

[root@centos ~]# netstat -ntl6
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN  

 打印NIC信息

netstat {--interfaces|-I|-i} [--all|-a] [--extend|-e]  [--verbose|-v]  [--program|-p]  [--numeric|-n]  [--numeric-hosts]  [--numeric-
       ports] [--numeric-users] [--continuous|-c] [delay]

比如查看NIC信息跟ifconfig一样

[root@centos ~]# netstat -ia
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33            1500    40264      0      0 0         12113      0      0      0 BMRU
lo              65536       79      0      0 0            79      0      0      0 LRU
[root@centos ~]# 
[root@centos ~]# ifconfig -s
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33            1500    40311      0      0 0         12137      0      0      0 BMRU
lo              65536       79      0      0 0            79      0      0      0 LRU

打印路由信息

netstat    {--route|-r}   [address_family_options]   [--extend|-e[--extend|-e]]   [--verbose|-v]   [--numeric|-n]   [--numeric-hosts]
       [--numeric-ports] [--numeric-users] [--continuous|-c] [delay]

查看路由表,跟route 命令一样

[root@centos ~]# netstat -ra
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 ens33
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 ens33
[root@centos ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

打印伪装连接和多播成员资格的信息等等。

4.2 ss

ss在端口占用检查方面跟netstat很像。是一个打印网络的socket情报的命令。

ss [options] [ FILTER ]

ss  is used to dump socket statistics. It allows showing information similar to netstat.  It can display more TCP and state information than other tools.

 经常使用的用法

[root@centos ~]# ss -nta
State      Recv-Q Send-Q                                    Local Address:Port                                                   Peer Address:Port              
LISTEN     0      128                                                   *:22                                                                *:*                  
LISTEN     0      100                                           127.0.0.1:25                                                                *:*                  
ESTAB      0      36                                        192.168.0.211:22                                                     192.168.0.13:58026              
LISTEN     0      128                                                [::]:22                                                             [::]:*                  
LISTEN     0      100                                               [::1]:25                                                             [::]:*                  

[root@centos ~]# ss -ntl
State      Recv-Q Send-Q                                    Local Address:Port                                                   Peer Address:Port              
LISTEN     0      128                                                   *:22                                                                *:*                  
LISTEN     0      100                                           127.0.0.1:25                                                                *:*                  
LISTEN     0      128                                                [::]:22                                                             [::]:*                  
LISTEN     0      100                                               [::1]:25                                                             [::]:*                  

注意:ss命令的属性跟netstat很像。学会一个另外一个也很快能理解。

4.3 lsof

列出所有打开的文件。

我们知道Linux一起皆文件。也就是说lsof可以调查端口的占用情况,当然强大的lsof可以查询很多东西。像进程process, 用户user等等。

详细内容可以用 man lsof 命令查询。这个命令的说明 简直就是长篇论文。

这个命令也不是系统自带的,需要安装。安装方法跟上面的命令一样。

打印所有端口状态

# 打印ipv4的所有socket
[root@centos ~]# lsof -i 4 -a 
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chronyd  690 chrony    5u  IPv4  16930      0t0  UDP localhost:323 
sshd    1010   root    3u  IPv4  20080      0t0  TCP *:ssh (LISTEN)
master  1115   root   13u  IPv4  20914      0t0  TCP localhost:smtp (LISTEN)
sshd    2468   root    3u  IPv4  30517      0t0  TCP centos:ssh->192.168.0.13:58026 (ESTABLISHED)

# 打印ipv6的所有socket
[root@centos ~]# lsof -i 6
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chronyd  690 chrony    6u  IPv6  16931      0t0  UDP localhost:323 
sshd    1010   root    4u  IPv6  20082      0t0  TCP *:ssh (LISTEN)
master  1115   root   14u  IPv6  20915      0t0  TCP localhost:smtp (LISTEN)

指定的端口状态查询

# 指定端口22的状态查询
[root@centos ~]# lsof -i:22 
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1010 root    3u  IPv4  20080      0t0  TCP *:ssh (LISTEN)
sshd    1010 root    4u  IPv6  20082      0t0  TCP *:ssh (LISTEN)
sshd    2468 root    3u  IPv4  30517      0t0  TCP centos:ssh->192.168.0.13:58026 (ESTABLISHED)

 指定host的连接查询

# 来自192.168.0.13 的网络连接
[root@centos ~]# lsof -i@192.168.0.13 
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    2468 root    3u  IPv4  30517      0t0  TCP centos:ssh->192.168.0.13:58026 (ESTABLISHED)

指定host和端口的连接查询

# centos机器的端口22的状态查询
[root@centos ~]# lsof -i@centos:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    2468 root    3u  IPv4  30517      0t0  TCP centos:ssh->192.168.0.13:58026 (ESTABLISHED)

指定协议的情况下查询

# ipv4 端口22
[root@centos ~]# lsof -i4:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1010 root    3u  IPv4  20080      0t0  TCP *:ssh (LISTEN)
sshd    2468 root    3u  IPv4  30517      0t0  TCP centos:ssh->192.168.0.13:58026 (ESTABLISHED)

# ipv6 端口22
[root@centos ~]# lsof -i6:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1010 root    4u  IPv6  20082      0t0  TCP *:ssh (LISTEN)

上面的属性 都可以自由组合来打印自己需要的内容,只是要注意先后顺序。

除了端口状态查询以外,lsof还具有ps命令的功能

查询user lihg和nginx的所有process

[root@centos ~]# lsof -u lihg,nginx
COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
bash    2911 lihg  cwd    DIR  253,0       188 33574977 /root
bash    2911 lihg  rtd    DIR  253,0       224       64 /
bash    2911 lihg  txt    REG  253,0    964536 50553748 /usr/bin/bash
bash    2911 lihg  mem    REG  253,0     61560    15691 /usr/lib64/libnss_files-2.17.so
bash    2911 lihg  mem    REG  253,0 106172832 50553739 /usr/lib/locale/locale-archive
bash    2911 lihg  mem    REG  253,0   2156272    15673 /usr/lib64/libc-2.17.so
bash    2911 lihg  mem    REG  253,0     19248    15679 /usr/lib64/libdl-2.17.so
bash    2911 lihg  mem    REG  253,0    174576    30658 /usr/lib64/libtinfo.so.5.9
bash    2911 lihg  mem    REG  253,0    163312    15666 /usr/lib64/ld-2.17.so
bash    2911 lihg  mem    REG  253,0     26970    30627 /usr/lib64/gconv/gconv-modules.cache
bash    2911 lihg    0u   CHR  136,1       0t0        4 /dev/pts/1
bash    2911 lihg    1u   CHR  136,1       0t0        4 /dev/pts/1
bash    2911 lihg    2u   CHR  136,1       0t0        4 /dev/pts/1
bash    2911 lihg  255u   CHR  136,1       0t0        4 /dev/pts/1

lsof的最基本的功能,打印打开的文件。

 打印指定目录下打开的文件

# 查询目录/home/lihg/下打开的文件
[root@centos ~]# lsof /home/lihg/
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
bash    2911 lihg  cwd    DIR  253,0      120 17674103 /home/lihg
vi      2934 lihg  cwd    DIR  253,0      120 17674103 /home/lihg

4.4 nc

nc命令可以用于涉及到TCP,UDP,UNIX套接字的任何事情。

比如说打开TCP连接,发送UDP数据包,监听端口,扫描端口。

不是系统自带命令,需要安装。

centos 这里要特别注意要添加yum源epel

然后再用命令 yum install netcat -y 来安装netcat。

如果是nmap-ncat 包的话,可能没有端口扫描功能。

4.4.1 监听端口

 监听端口(默认是TCP)

[lihg@centos ~]$ nc -l 8090

[root@centos ~]# lsof -i:8090
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nc      2948 lihg    3u  IPv6  36465      0t0  TCP *:8090 (LISTEN)
nc      2948 lihg    4u  IPv4  36466      0t0  TCP *:8090 (LISTEN)

 监听端口(UDP)

[lihg@centos ~]$ nc -lu 8090

[root@centos ~]# lsof -i:8090
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nc      2993 lihg    3u  IPv6  37237      0t0  UDP *:8090 
nc      2993 lihg    4u  IPv4  37238      0t0  UDP *:8090 

只监听IPv4

[lihg@centos ~]$ nc -l4 8090

[root@centos ~]# lsof -i:8090
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nc      2995 lihg    3u  IPv4  37271      0t0  TCP *:8090 (LISTEN)

同理也可以只监听IPv6。

4.4.2 扫描端口

centos的IP地址是192.168.0.211 ,node2的IP地址是192.168.0.203。

[root@centos ~]# hostname -I
192.168.0.211 

root@node2:~# hostname -I
192.168.0.203

从cenos去扫描node2的端口8090。(注意防火墙是否开启,开启的情况下要把测试的端口打开)

# ubuntu机器未开启8090端口监听的情况下
[root@centos ~]# nc -v -w 2 192.168.0.203 -z 8090
nc: connect to 192.168.0.203 port 8090 (tcp) failed: Connection refused


# ubuntu机器开启8090端口监听的情况下
root@node2:~# nc -l 8090

[root@centos ~]# nc -v -w 2 192.168.0.203 -z 8090
Connection to 192.168.0.203 8090 port [tcp/*] succeeded!

要注意host,port,protocol三个一起才可以确定一个连接。

# ubuntu机器监听UDP的8090端口
root@node2:~# nc -lu 8090

# centos机器去扫描ubuntu的TCP的8090端口
[root@centos ~]# nc -v -w 2 192.168.0.203 -z 8090
nc: connect to 192.168.0.203 port 8090 (tcp) failed: Connection refused

# centos机器去扫描ubuntu的UDP的8090端口
[root@centos ~]# nc -vu -w 2 192.168.0.203 -z 8090
Connection to 192.168.0.203 8090 port [udp/*] succeeded!

4.4.3 传输文件 聊天

借助监听端口和端口扫描的功能 可以实现两台机器之间传递信息,甚至是文件

 聊天

root@node2:~# nc -l 8090

[root@centos ~]# nc 192.168.0.203 8090

# 这样就可以建立一个TCP的连接,然后在centos这边输入内容,node2那边就可以看到,同理反过来一样。
root@node2:~# nc -l 8090
hi this is ubuntu

[root@centos ~]# nc 192.168.0.203 8090
hi this is ubuntu

 传送文件

# node2的家目录下的文件
root@node2:~# ls -l
total 8
drwxr-xr-x 3 root root 4096 Dec  8 09:47 snap
drwxr-xr-x 2 root root 4096 Dec 17 13:08 test
-rw-r--r-- 1 root root    0 Jan  6 12:50 ubuntu.txt
root@node2:~# cat ubuntu.txt 
this is ubuntu

#centos的家目录下的文件
[root@centos ~]# ll
total 4
-rw-------. 1 root root 1461 Dec 18 11:02 anaconda-ks.cfg
drwxr-xr-x. 3 root root   54 Dec 19 20:47 mysql

# 通过8090端口传送文件
root@node2:~# nc -l 8090 < ubuntu.txt 

[root@centos ~]# nc 192.168.0.203 8090 > centos.txt

# 可以看到文件已经传送到centos
[root@centos ~]# ll
total 8
-rw-------. 1 root root 1461 Dec 18 11:02 anaconda-ks.cfg
-rw-r--r--. 1 root root   15 Jan  6 21:53 centos.txt
drwxr-xr-x. 3 root root   54 Dec 19 20:47 mysql
[root@centos ~]# cat centos.txt 
this is ubuntu

还有很多其它的用法,可以用man nc 来查看帮助文档

5 其它

5.1 curl

一般开发者用这个命令来测试api,实际上命令很强大,有很多功能。

curl  is a tool to transfer data from or to a server, using one of the supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS,IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP). The command is designed to work without user interaction.

root@node2:~# curl localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
root@node2:~# 

5.2 tcpdump

抓包工具

# 通过tcp的8090 端口传输
root@node2:~# nc -l 8090 < ubuntu.txt 

[root@centos ~]# nc 192.168.0.203 8090
this is ubuntu

# 针对端口8090 可以抓取到包(默认是TCP)
root@node2:~# tcpdump -i ens33 port 8090
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
13:19:13.043666 IP 192.168.0.211.55112 > node2.8090: Flags [S], seq 3599715317, win 29200, options [mss 1460,sackOK,TS val 3688998 ecr 0,nop,wscale 7], length 0
13:19:13.043795 IP node2.8090 > 192.168.0.211.55112: Flags [S.], seq 3772181634, ack 3599715318, win 65160, options [mss 1460,sackOK,TS val 3170940051 ecr 3688998,nop,wscale 7], length 0
13:19:13.044143 IP 192.168.0.211.55112 > node2.8090: Flags [.], ack 1, win 229, options [nop,nop,TS val 3688998 ecr 3170940051], length 0
13:19:13.142334 IP node2.8090 > 192.168.0.211.55112: Flags [P.], seq 1:16, ack 1, win 510, options [nop,nop,TS val 3170940149 ecr 3688998], length 15
13:19:13.143560 IP 192.168.0.211.55112 > node2.8090: Flags [.], ack 16, win 229, options [nop,nop,TS val 3689097 ecr 3170940149], length 0

还可以根据fromIP,fromPort,toIP,toPort,protocol来进行组合抓包。

5.3 nmcli(centos)

man nmcli

修改dns, ip地址用

修改后要用 

systemctl restart NetworkManager 

以后补充

6 Linux的网络相关的文件

  • /etc/services
  • /etc/networks
  • /etc/hostname
  • /etc/hosts
  • /etc/host.conf
  • /etc/nsswitch.conf
  • /etc/resolv.conf
  • /etc/sysconfig/network
  • /etc/sysconfig/network-scripts/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux学习整理-网络命令集 的相关文章

  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • Apache 端口转发 80 到 8080 并访问 Apache (80) 中托管的应用程序,即 phpMyadmin 和 Tomcat (8080)

    我想访问托管在 tomcat 服务器 8080 中的应用程序 myapp 当前可以通过以下方式访问http example com 8080 myapp http example com 8080 myapp in http example
  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • 我想在 Red Hat Linux 服务器中执行 .ps1 powershell 脚本

    我有一个在窗口中执行的 ps1 powershell 脚本 但我的整个数据都在 Linux 服务器中 有什么可能的方法可以让我在红帽服务器中执行 powershell 脚本 powershell脚本是 Clear Host path D D
  • 在Java中执行.lnk文件

    我需要在java中执行 lnk文件 指向exe文件的lnk文件 我能怎么做 在 VB net 中我做 Process Start path 它有效 谢谢你的帮助 Use a 流程构建器 http download oracle com ja
  • 传递给命令 WPF 的多个参数[重复]

    这个问题在这里已经有答案了 我有以下层次结构 abstract class TicketBase public DateTime PublishedDate get set class TicketTypeA TicketBase publ
  • 在ubuntu中打开spyder

    我想在ubuntu中打开spyder Python IDE 通常我会在 shell 中编写 spyder 它会打开spyder IDE 现在 当我在shell中编写spyder时 它只是换行 什么也没有发生 类似于按 enter 我如何找回
  • Bash:将字符串添加到文件末尾而不换行

    如何将字符串添加到文件末尾而不换行 例如 如果我使用 gt gt 它将添加到文件末尾并换行 cat list txt yourText1 root host 37 echo yourText2 gt gt list txt root hos
  • 为什么此 NASM 代码会打印我的环境变量?

    本学期我刚刚完成计算机体系结构课程 除其他外 我们一直在涉足 MIPS 汇编并在 MARS 模拟器中运行它 今天 出于好奇 我开始在我的 Ubuntu 机器上摆弄 NASM 基本上只是将教程中的内容拼凑起来 并感受一下 NASM 与 MIP
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • Linux 中 m 标志和 o 标志将存储在哪里

    我想知道最近收到的路由器通告的 m 标志和 o 标志的值 从内核源代码中我知道存储了 m 标志和 o 标志 Remember the managed otherconf flags from most recently received R
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • linux下无法创建僵尸进程

    嗯 我有一个奇怪的问题 我无法在我的项目中创建僵尸进程 但我可以在其他文件中创建僵尸进程 有简单的说明 int main if fork 0 printf Some instructions n else sleep 10 wait 0 r

随机推荐

  • 正点原子Imx6ULL+LCD屏,竖屏使用时如何修改开机进度条

    正点原子给出的修改开机进度条 在使用时LCD是基于横版情况设定的 那对于像手机一样竖屏时 会发现不合适 因此对此进行了研究 首先准备图片 将logo alientek png logo psplash bar png文件旋转90度 旋转后如
  • Parallels Desktop 18提示“由于临界误差,不能启动虚拟机”

    Parallels Desktop最近更新到了18 2 0版本 但是许多小伙伴更新之后遇到了 由于临界误差 不能启动虚拟机 这样的问题 接下来小编就为大家带来解决PD虚拟机提示临界误差的解决方法 出现这个问题很有可能是Prl disp se
  • Xml中SelectSingleNode用法详解(转)

    最常见的XML数据类型有 Element Attribute Comment Text Element 指形如
  • redis sentinel搭建以及在jedis中使用

    一 redis主从搭建 1 搭建redis master 1 gt redis安装 mkdir p usr local webserver redis 安装目录 cd usr local webserver redis wget http
  • Java使用POI操作Excel合并单元格

    合并单元格的方法 指定 4 个参数 起始行 结束行 起始列 结束列 然后这个区域将被合并 CellRangeAddress region new CellRangeAddress startRow endRow startCol endCo
  • 某站webpack打包JS逆向,keyCipher、keySM2Cipher参数分析

    文章目录 前言 一 抓包分析 二 参数解析 1 加密定位 2 参数分析 三 响应解密 1 加密定位 总结 前言 今天来水一篇文章 某站webpack打包类型 登录 数据解密参数keyCipher keySM2Cipher 本文章仅供学习研究
  • 11. 实战:bs4法抓取网页图片并保存到本地文件夹

    前言 我们通过前面几节的学习已经了解到bs4模块对于我们抓取网页的方便之处 也通过一个实例实践了抓取某网站菜价 本节我们以某图片网为例 链接放评论区 实现抓取唯美壁纸栏目的内容并保存到本地文件夹 目标 思路 1 获取所有子页面链接地址 2
  • 数据库系统之函数依赖

    Functional Dependencies 什么是函数依赖 如何发现关系表中的函数依赖关系 函数依赖关系与对象的类 功能依赖与关联 函数依赖性的派生 阿姆斯特朗公理 Armstrong axioms 其他的推理规则 References
  • python如何学习(三)

    最近开始整理python的资料 博主建立了一个qq群 希望给大家提供一个交流的同平台 78486745 一 第一个Python程序 HelloWorld python的第一个程序也从hello world开始吧 usr bin env py
  • linux ipv6内核编译,linux ipv6内核设置

    linux ipv6内核设置 进入 proc sys net ipv6 conf all forwarding Type BOOLEAN 在两个接口之间进行global IPv6 forwarding 数据包转发 IPv6 当中您不能单独控
  • 使用 tf-idf 提取关键词

    tf idf 的简要介绍 tf term frequency 某个关键词在整篇文档中出现的频率 idf inverse document frequency 逆文档频率 某个词在所有文档中出现的频率 tf 公式 t f i j n i j
  • [C++11] nullptr 和 NULL

    在工作中 避免产生 野指针 最有效的方法 是以下两点 1 在定义指针的同时完成初始化操作 即便该指针的指向尚未明确 也要将其初始化为空指针 2 在delete释放该指针后 对该指针赋值为空指针 C 11 新增关键字 nullptr 专门用来
  • jmeter之接口数据与数据库数据检验!

    前言 本文讲解使用jmeter测试接口 然后与数据库里面的数据进行校验对比 本节使用一个新增数据的接口 新增一条数据 然后在数据库里面进行查询 是否能够查询到此条数据 一 接口环境搭建 1 1 新建一个http请求 写好请求的内容 我的大概
  • JavaEE 笔记03:基于Vue,SpringBoot的前后端分离的简单作业管理系统

    基于Vue SpringBoot的前后端分离的简单作业管理系统 目录 基于Vue SpringBoot的前后端分离的简单作业管理系统 前言 环境 开发环境 部署环境 功能展示 登录与注册 学生 学生首页 学生查看作业列表 学生提交作业 学生
  • Puppeteer基础入门、常见应用、利用谷歌插件编写Puppeteer脚本

    前言 Puppeteer已经听说过很多次了 也见过一些与之相关的文章 但是一直没怎么研究过 现在来简单学习一下 简介 Puppeteer 是一个 Node 库 它提供了一个高级 API 来通过 DevTools 协议控制 Chromium
  • 前端学习——html

    1 页面标签包含在里 其中有头和躯干 一 head里的常用标签设置 meta标签的设置 在网页中 meta标签最常用的设置是用来设置字符集
  • 静态和动态类型编程语言的区别

    静态和动态是针对变量的数据类型而言的 区别如下 1 使用静态类型语言编写的代码中 要声明变量的数据类型 而且不同数据类型的变量不允许直接赋值 它的数据类型是编译期间进行检查的 2 静态类型语言在使用变量之前 需要为它们分配好内存 3 静态类
  • python画折线图两种写法

    import matplotlib pyplot as plt from openpyxl import load workbook 这个是从Excel表格中导入数据 为了让中文不显示成乱码 plt rcParams font sans s
  • java中锁的面试题

    1 synchronized锁 悲观锁 同步锁 synchronized关键字 表示 同步 的 它可以对 多行代码 进行 同步 将多行代码当成是一个完整的整体 一个线程如果进入到这个代码块中 会全部执行完毕 执行结束后 其它线程才会执行 这
  • Linux学习整理-网络命令集

    目录 前提 1 机器IP地址查询 1 1 ifconfig 1 1 1 安装包 1 1 2 执行命令 1 1 3 拓展 ifconfig的其它用法 1 1 4 常用的属性说明 1 2 ip addr 1 2 1 查看IP地址 1 2 2 其