深入网络操作命令(9条命令)

nmap命令

nmap命令:网络探索工具和安全/端口扫描器

格式:nmap [Scan Type...] [Options] {target specification}

参数:

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

例子:

[root@xxx ~]# nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2019-07-18 23:33 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 998 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
25/tcp open  smtp

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

lsof命令

lsof命令: 显示打开的文件

格式:

lsof [ -?abChlnNOPRtUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D
D ] [ +|-e s ] [ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k
] [ -K k ] [ +|-L [l] ] [ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r
[t[m]] ] [ -s [p:s] ] [ -S [t] ] [ -T [t] ] [ -u s ] [ +|-w ] [ -x
[fl] ] [ -z [z] ] [ -Z [Z] ] [ -- ] [names]

参数:

-a:列出打开文件存在的进程;
-c<进程名>:列出指定进程所打开的文件;
-g:列出GID号进程详情;
-d<文件号>:列出占用该文件号的进程;
+d<目录>:列出目录下被打开的文件;
+D<目录>:递归列出目录下被打开的文件;
-n<目录>:列出使用NFS的文件;
-i<条件>:列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号>:列出指定进程号所打开的文件;
-u:列出UID号进程详情;
-h:显示帮助信息;
-v:显示版本信息。

例子:

[root@xxx ~]# lsof | head -10
COMMAND     PID   TID    USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1          root  cwd       DIR              253,0       236         64 /
systemd       1          root  rtd       DIR              253,0       236         64 /
systemd       1          root  txt       REG              253,0   1620416     119959 /usr/lib/systemd/systemd
systemd       1          root  mem       REG              253,0     20112      71476 /usr/lib64/libuuid.so.1.3.0
systemd       1          root  mem       REG              253,0    265624      71459 /usr/lib64/libblkid.so.1.1.0
systemd       1          root  mem       REG              253,0     90248      46297 /usr/lib64/libz.so.1.2.7
systemd       1          root  mem       REG              253,0    157424      71466 /usr/lib64/liblzma.so.5.2.2
systemd       1          root  mem       REG              253,0     23968      90446 /usr/lib64/libcap-ng.so.0.0.0
systemd       1          root  mem       REG              253,0     19896      71194 /usr/lib64/libattr.so.1.1.0

mail命令

mail命令:命令行的电子邮件发送和接收工具。

格式:

mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-
          addr] [-r from-addr] [-h hops] [-A account] [-S vari‐
          able[=value]] to-addr . . .
   mailx [-BDdeEHiInNRv~] [-T name] [-A account] [-S variable[=value]] -f
          [name]
   mailx [-BDdeEinNRv~] [-A account] [-S variable[=value]] [-u user]

参数:

-b<地址>:指定密件副本的收信人地址;
-c<地址>:指定副本的收信人地址;
-f<邮件文件>:读取指定邮件文件中的邮件;
-i:不显示终端发出的信息;
-I:使用互动模式;
-n:程序使用时,不使用mail.rc文件中的设置;
-N:阅读邮件时,不显示邮件的标题;
-s<邮件主题>:指定邮件的主题;
-u<用户帐号>:读取指定用户的邮件;
-v:执行时,显示详细的信息。

安装:yum install -y mailx sendmail

例子:

# 使用管道进行邮件发送

echo "hello,this is the content of mail.welcome to www.linuxde.net" | mail -s "Hello from linuxde.net by pipe" admin@linuxde.net
# 使用管道直接敲入这行命令即可完成邮件的发送,其中echo后的是邮件正文。

# 使用文件进行邮件发送
mail -s "Hello from linuxde.net by file" admin@linuxde.net < mail.txt
# 使用上面的命令后,我们就可以把mail.txt文件的内容作为邮件的内容发送给admin@linuxde.net了。

#很多情况下,我们也需要使用邮件来发送附件,在linux下使用mail命令发送附件也很简单,不过首先需要安装uuencode软件包,这个程序是对二进制文件进行编码使其适合通过邮件进行发送,在CentOS上安装该软件包如下:

yum install sharutils
#安装完成后我们就可以来进行附件的发送了,使用如下命令:

uuencode test.txt test | mail -s "hello,see the attachement" admin@linuxde.net<mail.txt

mutt命令

mutt命令:Mutt邮件用户代理

格式:

   mutt [-nRyzZ] [-e cmd] [-F file] [-m type] [-f file]
   
   mutt  [-nx]  [-e cmd] [-F file] [-H file] [-i file] [-s subj] [-b addr]
   [-c addr] [-a file [...] --] addr|mailto_url [...]

   mutt [-nx] [-e cmd] [-F file] [-s subj] [-b addr] [-c  addr]  [-a  file
   [...] --] addr|mailto_url [...]  < message

   mutt [-n] [-e cmd] [-F file] -p

   mutt [-n] [-e cmd] [-F file] -A alias

   mutt [-n] [-e cmd] [-F file] -Q query

   mutt -v[v]

   mutt -D

参数:

 -a <文件> 在邮件中加上附加文件。
 -b <地址> 指定密件副本的收信人地址。
 -c <地址> 指定副本的收信人地址。
 -f <邮件文件> 指定要载入的邮件文件。
 -F <配置文件> 指定mutt程序的设置文件,而不读取预设的.muttrc文件。
 -h 显示帮助。
 -H <邮件草稿> 将指定的邮件草稿送出。
 -i <文件> 将指定文件插入邮件内文中。
 -m <类型> 指定预设的邮件信箱类型。
 -n 不要去读取程序培植文件(/etc/Muttrc)。
 -p 在mutt中编辑完邮件后,而不想将邮件立即送出,可将该邮件暂缓寄出。
 -R 以只读的方式开启邮件文件。
 -s <主题> 指定邮件的主题。
 -v 显示mutt的版本信息以及当初编译此文件时所给予的参数。
 -x 模拟mailx的编辑方式。
 -z 与-f参数一并使用时,若邮件文件中没有邮件即不启动mutt。

例子:

[root@xxx ~]# mutt xxxxx@163.com -s "随便发送" -a 1.txt </etc/passwd 

nslookup命令

nslookup命令:常用域名查询工具,就是查DNS信息用的命令。

格式:nslookup(选项)(参数)

参数:

-sil:不显示任何警告信息。

安装:

[root@xxx ~]# yum install -y bind-utils

例子:

[root@xxx ~]# nslookup www.baidu.com
Server:         192.168.141.2
Address:        192.168.141.2#53

Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 183.232.231.174
Name:   www.a.shifen.com
Address: 183.232.231.172

dig命令

dig命令:DNS查找工具

格式:

   dig [@server] [-b address] [-c class] [-f filename] [-k filename] [-m]
           [-p port#] [-q name] [-t type] [-x addr] [-y [hmac:]name:key] [-4]
           [-6] [name] [type] [class] [queryopt...]
           
   dig [-h]

   dig [global-queryopt...] [query...]

参数:

@<服务器地址>:指定进行域名解析的域名服务器;
-b<ip地址>:当主机具有多个IP地址,指定使用本机的哪个IP地址向域名服务器发送域名查询请求;
-f<文件名称>:指定dig以批处理的方式运行,指定的文件中保存着需要批处理查询的DNS任务信息;
-P:指定域名服务器所使用端口号;
-t<类型>:指定要查询的DNS数据类型;
-x<IP地址>:执行逆向域名查询;
-4:使用IPv4;
-6:使用IPv6;
-h:显示指令帮助信息。

例子:

[root@xxx ~]# dig 114.114.114.114

; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> 114.114.114.114
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 50543
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;114.114.114.114.               IN      A

;; AUTHORITY SECTION:
.                       5       IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2019071801 1800 900 604800 86400

;; Query time: 18 msec
;; SERVER: 192.168.141.2#53(192.168.141.2)
;; WHEN: Fri Jul 19 01:26:27 EDT 2019
;; MSG SIZE  rcvd: 108

host命令

host命令:DNS查找工具

格式:

host [-aCdlnrsTwv] [-c class] [-N ndots] [-R number] [-t type]
[-W wait] [-m flag] [-4] [-6] {name} [server]

参数:

-a:显示详细的DNS信息;
-c<类型>:指定查询类型,默认值为“IN“;
-C:查询指定主机的完整的SOA记录;
-r:在查询域名时,不使用递归的查询方式;
-t<类型>:指定查询的域名信息类型;
-v:显示指令执行的详细信息;
-w:如果域名服务器没有给出应答信息,则总是等待,直到域名服务器给出应答;
-W<时间>:指定域名查询的最长时间,如果在指定时间内域名服务器没有给出应答信息,则退出指令;
-4:使用IPv4;
-6:使用IPv6.

例子:

[root@xxx ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 183.232.231.172
www.a.shifen.com has address 183.232.231.174

# 显示详细的DNS信息
[root@xxx ~]# host -a  www.baidu.com
Trying "www.baidu.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com.                 IN      ANY

;; ANSWER SECTION:
www.baidu.com.          5       IN      CNAME   www.a.shifen.com.

Received 58 bytes from 192.168.141.2#53 in 2012 ms

traceroute命令

traceroute命令:追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节。

格式:

 traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...]
               [-i device] [-m max_ttl] [-p port] [-s src_addr]
               [-q nqueries] [-N squeries] [-t tos]
               [-l flow_label] [-w waittime] [-z sendwait] [-UL] [-D]
               [-P proto] [--sport=port] [-M method] [-O mod_options]
               [--mtu] [--back]
               host [packet_len]
       traceroute6  [options]

参数:

-d:使用Socket层级的排错功能;
-f<存活数值>:设置第一个检测数据包的存活数值TTL的大小;
-F:设置勿离断位;
-g<网关>:设置来源路由网关,最多可设置8个;
-i<网络界面>:使用指定的网络界面送出数据包;
-I:使用ICMP回应取代UDP资料信息;
-m<存活数值>:设置检测数据包的最大存活数值TTL的大小;
-n:直接使用IP地址而非主机名称;
-p<通信端口>:设置UDP传输协议的通信端口;
-r:忽略普通的Routing Table,直接将数据包送到远端主机上。
-s<来源地址>:设置本地主机送出数据包的IP地址;
-t<服务类型>:设置检测数据包的TOS数值;
-v:详细显示指令的执行过程;
-w<超时秒数>:设置等待远端主机回报的时间;
-x:开启或关闭数据包的正确性检验。

例子:

[root@xxx ~]# traceroute www.baidu.com
traceroute to www.baidu.com (183.232.231.174), 30 hops max, 60 byte packets
 1  gateway (192.168.141.2)  0.089 ms  0.032 ms  0.065 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *

tcpdump命令

tcpdump命令:命令行的抓包工具。

格式:

tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ]
               [ -c count ]
               [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
               [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
               [ --number ] [ -Q|-P in|out|inout ]
               [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
               [ -W filecount ]
               [ -E spi@ipaddr algo:secret,...  ]
               [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
               [ --time-stamp-precision=tstamp_precision ]
               [ --immediate-mode ] [ --version ]
               [ expression ]

参数:

-a:尝试将网络和广播地址转换成名称;
-c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作;
-d:把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出;
-dd:把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出;
-ddd:把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出;
-e:在每列倾倒资料上显示连接层级的文件头;
-f:用数字显示网际网络地址;
-F<表达文件>:指定内含表达方式的文件;
-i<网络界面>:使用指定的网络截面送出数据包;
-l:使用标准输出列的缓冲区;
-n:不把主机的网络地址转换成名字;
-N:不列出域名;
-O:不将数据包编码最佳化;
-p:不让网络界面进入混杂模式;
-q :快速输出,仅列出少数的传输协议信息;
-r<数据包文件>:从指定的文件读取数据包数据;
-s<数据包大小>:设置每个数据包的大小;
-S:用绝对而非相对数值列出TCP关联数;
-t:在每列倾倒资料上不显示时间戳记;
-tt: 在每列倾倒资料上显示未经格式化的时间戳记;
-T<数据包类型>:强制将表达方式所指定的数据包转译成设置的数据包类型;
-v:详细显示指令执行过程;
-vv:更详细显示指令执行过程;
-x:用十六进制字码列出数据包资料;
-w<数据包文件>:把数据包数据写入指定的文件。

例子:

# 直接启动tcpdump将监视第一个网络接口上所有流过的数据包
tcpdump

# 监视指定网络接口的数据包
tcpdump -i eth1

# 如果不指定网卡,默认tcpdump只会监视第一个网络接口,一般是eth0,下面的例子都没有指定网络接口。

# 监视指定主机的数据包

# 打印所有进入或离开sundown的数据包。
tcpdump host sundown
也可以指定ip,例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包

tcpdump host 210.27.48.1
# 打印helios 与 hot 或者与 ace 之间通信的数据包

tcpdump host helios and \( hot or ace \)

# 截获主机210.27.48.1 和主机210.27.48.2 或210.27.48.3的通信
tcpdump host 210.27.48.1 and \ (210.27.48.2 or 210.27.48.3 \)

# 打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
tcpdump ip host ace and not helios

# 如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2

# 截获主机hostname发送的所有数据
tcpdump -i eth0 src host hostname

# 监视所有送到主机hostname的数据包
tcpdump -i eth0 dst host hostname

# 监视指定主机和端口的数据包
如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令
tcpdump tcp port 23 host 210.27.48.1

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

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

# 打印所有通过网关snup的ftp数据包

tcpdump 'gateway snup and (port ftp or ftp-data)'
# 注意:表达式被单引号括起来了,这可以防止shell对其中的括号进行错误解析

# 打印所有源地址或目标地址是本地主机的IP数据包
tcpdump ip and not net localnet

# 如果本地网络通过网关连到了另一网络,则另一网络并不能算作本地网络。
上一篇:linux – 使用tcpdump,我如何尽可能明显地看到未加密的SMTP会话?


下一篇:如何在Linux上使用tcpdump从同一台机器上捕获数据包?