NOI Linux

来自李老师的教学百科
跳转至: 导航搜索

NOI 信息学奥赛的专用Linux版本

最新版是基于ubuntu 20.04构建,内置了竞赛的检测程序

目录

特别功能整理[编辑]

挂载smb使用读写777权限[编辑]

 sudo mount -t cifs -o "rw,dir_mode=0777,file_mode=0777,username=winuser,password=winpwd" //192.168.100.200/共享目录  /mnt/share

更新所有软件的指令[编辑]

 apt-get dist-upgrade

查看已经安装的所有软件[编辑]

 dpkg -l

在浏览器中查看tail输出[编辑]

使用下面的一行代码可以在指定端口上查看tail的日志结果:

 (echo -e ‘HTTP/1.1 200 OK\nAccess-Control-Allow-Origin: *\nContent-type: text/event-stream\n’ && tail -f /path/to/some/file | sed -u -e ‘s/^/data: /;s/$/\n/’) | nc -l 1234

这个方法是使用系统内的nc功能实现,只能有一个查看端,仅限临时测试使用的,并不是稳定的工作流,稳定的查看方式建议使用websocket

 websocketd --port 1234 tail -f /path/to/file

以上方法参考原文链接

recovering journal故障[编辑]

不正常的关机可能会导致这个错误,卡在开机画面不动,比如突然的断电,强制关机之类的操作都有可能引起。

修复方法:

关闭电脑,再打开电脑进入grub(我是双系统,单系统开机前就长按shift)

找到ubuntu(高级选项),再找到 recovery mode 按e

找到ro covery nomodest 改为 rw single init=/bin/bash

按ctrl+x 进入终端界面(应该是进入root用户)

umount有问题的磁盘

 umount /dev/sda5
 fsck /dev/sda5

因为卸载后才能修复 或者

 e2fsck -a /dev/sda5

另外一种方法

就是直接进入recovery mode ,选择fsck 修复所有磁盘

不过以上方法在单系统中都会有问题,解决办法待查。

计算圆周率[编辑]

执行下面的命令就会输出小数点后30位的圆周率:

 echo "scale=30; a(1)*4" | bc -l
  • 命令的说明如下:
  • -l --mathlib use the predefined math routines
  • a(x) The arctangent of x, arctangent returns radians
  • sacle=x Define the number of digits after the decimal point

如果在命令前加上time,可以在显示结果后出示计算用的时间,可作为CPU的运算能力比较参考值。

例如学生机的执行结果如下:

 c9@c9-Lenovo:~$ time echo "scale=900; a(1)*4" | bc -l
 3.141592653589793238462643383279502884197169399375105820974944592307\
 81640628620899862803482534211706798214808651328230664709384460955058\
 22317253594081284811174502841027019385211055596446229489549303819644\
 28810975665933446128475648233786783165271201909145648566923460348610\
 45432664821339360726024914127372458700660631558817488152092096282925\
 40917153643678925903600113305305488204665213841469519415116094330572\
 70365759591953092186117381932611793105118548074462379962749567351885\
 75272489122793818301194912983367336244065664308602139494639522473719\
 07021798609437027705392171762931767523846748184676694051320005681271\
 45263560827785771342757789609173637178721468440901224953430146549585\
 37105079227968925892354201995611212902196086403441815981362977477130\
 99605187072113499999983729780499510597317328160963185950244594553469\
 08302642522308253344685035261931188171010003137838752886587533208381\
 420617177669147300
 real    0m0.315s
 user    0m0.315s
 sys     0m0.000s

安装与使用慧编程工具[编辑]

官方文档:点此查阅

主要就是安装一个deb包,再启动。

 wget https://dl.makeblock.com/mblock5/linux/mLink-1.2.0-amd64.deb
 sudo apt install ./mLink-1.2.0-amd64.deb
 sudo mblock-mlink start

完成这三步就可以在浏览器中连接设备了。

扫描同一局域网的IP[编辑]

使用命令 安装(确保网络链接正常)

 sudo apt-get install arp-scan

查看本机的ip地址,一般有线在interface en0/eth0, 无线在wlan0上.

 ifconfig
 ip addr 

然后使用arp-scan -I wlan0 --localnet 或arp-scan -I eno --localnet 就可以查看同一局域网的其他设备,也可以直接:

 sudo arp-scan -l

查看机器温度[编辑]

终端中可查看机器温度的功能由sensors软件提供,安装:

 sudo apt install lm-sensors

检测兼容传感器:

 sudo sensors-detect 

通过前面的操作, 我们已经成功安装了lm-sensors软件包,并且在由Ubuntu笔记本电脑上成功检测到支持的传感器。

现在我们可以执行以下命令来查看温度数据:

 sensors

有些国产笔记本可能由于没遵守linux的定义规则,会在sensors中显示的温度信息较为混乱,如果只要监视CPU温度,还可以使用一个很小的软件:i7z,安装也很简单:

 sudo apt install i7z

这个软件要用sudo权限执行,可显示CPU温度、频率与各核心的详细信息。不过只支持intel家的CPU,对AMD系列的不支持。

必要的优化问题[编辑]

sudo免密码设置[编辑]

1.使用命令sudo visudo,编辑/etc/sudoers文件

2.在%sudo ALL=(ALL:ALL) ALL 下面添加

aqde ALL=(ALL) NOPASSWD:ALL

注:aqde是我的用户名,改成你自己的,这行也可直接复制过去后修改用户名

3.CTRL + X退出,提示是否保存选Y,回车

蓝牙设备稳定性问题[编辑]

Linux出于节能的考虑,对蓝牙设备不使用时就会中断,如果我们使用的是蓝牙键盘和鼠标,这就会导致连接会经常中断重连,影响使用的连续感。会很明显感觉到设备在睡眠或重新启动后不断断开连接并重新连接。

reddit上找到了解决方案:

执行下面的命令修改配置:

 sudo vim /etc/bluetooth/input.conf

找到下面这行,去除行首的#号,让这个配置生效就行了:

 UserspaceHID=true

保存并退出,重新启动蓝牙服务(或重新启动)。之后,鼠标就会始终保持连接了。

测试发现对键盘来说还是会出现断开重连的问题,,终端可执行下面命令扫描周边蓝牙设备,怀疑是蓝牙设备太多造成的干扰:

 bluetoothctl

此命令会显示周边所有蓝牙设备的MAC地址,执行quit退出。

使用NAS扩展存储[编辑]

如果安装时分配的硬盘不大,比如我只在笔记本上分配了20G安装,而安装大部分的常用软件就要占用17G左右的空间了,这时候就可以使用家中的NAS提供的NFS功能来快速扩展存储空间,在NAS中设置好共享目录的NFS权限后,再编辑/etc/fstab文件就可以自动扩展存储了。

 # automount NNAS at media dir
 192.168.1.8:/volume1/NNAS     /media/nnas/	nfs	rw	0	1

如上面的设置,第一项是在NAS中配置的,第二项是机器中对应的存储位置,后面是NFS的读写连接方式。

视频播放器的安装[编辑]

在ubuntu中有两个非常优秀的视频播放工具,分别是VLC和mplayer,VLC是一个GUI工具,mplayer是CLI的工具,虽然最终都要在GUI上播放。两个软件都可以通过apt install 直接安装。

清除SNAP服务[编辑]

   snap list; sudo snap remove xxx
   sudo rm -rf /var/cache/snapd
   sudo apt purge snapd
   rm -rf ~/snap

自动关机添加问题[编辑]

在使用Ubuntu系统的时候,遇到这样的一个问题:我使用普通用户登录系统,然后执行sudo echo "hello" >> /etc/rc.local命令的时候,提示权限不够。

虽然知道echo命令是属于root用户的权限,但是我之前一直以为加个sudo就能够获取到root的全部权限,现在才发现这是不对的。使用sudo命令后,获取到的只是root的一部分权限。


解决办法:

1、直接使用root用户,这样肯定不会有问题;

2、具体实现如下:

 sudo sh -c 'echo "15 18   * * *   root    poweroff" >> /etc/crontab '


默认进字符模式[编辑]

随着版本更新,老的方法已经不好用了

 sudo systemctl set-default multi-user.target  "默认进入字符界面"

恢复默认图形模式的命令:

 sudo systemctl set-default graphical.target   "默认进入图形界面"

当需要进入图形界面时输入

 sudo init 5

可以使用startx代替

 startx

关闭显示器[编辑]

字符模式下有时候显示不会自动关闭,好像也是我自己设置的。。。 要关闭的时候要在本地终端上执行:

 setterm --blank 1

这样就会1分钟后关闭显示器了,但这个命令在远程终端上执行并不能生效。

字符模式下的wifi使用[编辑]

如果把Linux始终以字符模式启动,还是很节省内存的,但wifi就要手工配置一下了,也有利于对网络的理解。

较常用的指令有这几个:nmcliiwconfig等。

比如我的E10笔记本上可以使用下面的命令

启用无线网卡:

 sudo ip link set 【wlp8s0(这要用iwconfig 查看对应网卡的名字先)】 up

查看wifi列表:

 sudo iw dev wlp8s0 scan |less

直接连接未加密的wifi:

 sudo iw dev wlp8s0 connect ghtxx

查看wifi的强度与速率信息:

 nmcli dev wifi

使用dhcp获取IP地址:

 sudo dhclient wlp8s0

这一步很慢,有时就像死机了一样,耐心等一下。


安装chrome浏览器[编辑]

chrome浏览器已经成为事实上的标准,很多国内网站也强制要求chrome内核才能正常使用,如同当年的IE一样了。 在ubuntu上安装chrome只要执行两条命令即可:「此命令无需翻墙即可使用」

 wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
 sudo apt install ./google-chrome-stable_current_amd64.deb

完成后可以找到chrome浏览器使用,在旧电脑上,chrome的性能相对firefox较慢。 在安装过程中,官方 Google 软件源被添加到你的系统。你可以使用cat命令来验证文件内容:

  cat /etc/apt/sources.list.d/google-chrome.list

输出将会像下面这样:

 ### THIS FILE IS AUTOMATICALLY CONFIGURED ###

 # You may comment out this entry, but any other modifications may be lost.

 deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main

当一个新的版本被发布时,这确保你的 Google Chrome 可以被自动升级。

开启RDP服务[编辑]

RDP是windows的远程连接最便捷方法,ubuntu也提供了支持。参考1

终端的打字游戏[编辑]

在Linux上学习打字有一个很强大的终端课程软件:

sudo apt install gtypist 

安装后即可使用:

gtypist

同时在终端中还有个类似TT的经典打字练习软件,执行安装命令:

sudo apt install typespeed

安装完成后即可使用:

PATH=$PATH:/usr/games
typespeed

这个软件是分类的games中的,所以在运行前要加一下路径说明,而且这是一个可以联网比赛打字的软件。

终端的电子邮件工具[编辑]

在Linux中有很多优秀的电子邮件工具,比如Thunderbird等,但我们学编程最好多使用终端,终端下的邮件工具最棒的就是mutt了。

定时执行任务[编辑]

编辑系统文件进行自定义即可:

/etc/crontab

文件中有详细的说明与定义,查看定义编辑即可.

多系统启动的顺序选择[编辑]

linux与win安装在一台电脑时会由linux的grub管理启动菜单,默认是启动linux,如果要修改为默认启动linux,进入linux后,执行:

sudo vim /etc/default/grub

其中的“GRUB_DEFAULT=0”就是设置的默认启动项了。GRUB启动项是按照启动菜单依次使用数字进行索引了,起始数字为0。结合前面的系统启动菜单,我们可以看到,Windows的启动项通常在第5项,因此这里我们就需要修改为4(因为第一项是从0开始的)。

修改完成,保存退出之后,还需要执行一下

sudo update-grub

来重新生成GRUB启动配置项。

与win同时安装在一台电脑的时间错误[编辑]

timedatectl set-local-rtc 1 --adjust-system-clock

执行上面的这条命令后就可以与电脑中的win一样把BIOS时间当做本地时间了。

Windows 与 Mac/Linux 看待系统硬件时间的方式是不一样的:Windows把计算机硬件时间当作本地时间(local time),所以在Windows系统中显示的时间跟BIOS中显示的时间是一样的。Linux/Unix/Mac把计算机硬件时间当作 UTC, 所以在Linux/Unix/Mac系统启动后在该时间的基础上,加上电脑设置的时区数( 比如我们在中国,它就加上“8” ),因此,Linux/Unix/Mac系统中显示的时间总是比Windows系统中显示的时间快8个小时。所以,当你在Linux/Unix/Mac系统中,把系统现实的时间设置正确后,其实计算机硬件时间是在这个时间上减去8小时,所以当你切换成Windows系统后,会发现时间慢了8小时。就是这样个原因。

启动SSH服务[编辑]

ssh服务是linux最精彩的一种功能,可以很方便的进行管理操作,默认安装的NOI Linux并不会自动打开这个服务。

sudo systemctl enable ssh

执行上面的命令后重启就可以了。

ubuntu studio默认没有安装openssh server

sudo apt-get install openssh-server

安装后会自动配置启动项。

默认登录的用户名和密码[编辑]

默认安装的noi Linux并不会启用root用户,我们可以执行下面的命令,启用root用户并设置root的密码。

sudo passwd root

修改后可本机登录,但ssh登录时root不可使用密码,要使用密钥登录。

screen终端进程保护[编辑]

在终端执行的进程有时候会被系统中止,如果需要保持运行,我们需要安装screen或tmux这类的工具,screen默认的配置并不清晰,可以下载我的配置文件到home目录中优化运行界面。

wget https://gist.githubusercontent.com/jarodlee/75dfcb88111e4f5e9accc8e813d1ce0a/raw/89121fd0aebd58dba2c97cbe62f51476104144f4/.screenrc

网络可视化工具[编辑]

需要root权限运行的超酷工具:EtherApe

sudo apt-get install etherape

只能在图形界面中查看:

sudo etherape

字符界面用iftop就好。

显卡问题[编辑]

Linux对显卡的支持并不像windows那样一个安装包就可以解决,如果遇到显示问题可参考这篇文章的方法尝试。

通常来说先用下面的命令查看显卡的型号与对应的推荐驱动:

ubuntu-drivers devices
noi下查看显卡

从上图可以看出,我的显卡是:GF119 [GeForce 605],推荐安装的版本号是:nvidia-driver-390 - distro non-free recommended。

如果同意安装推荐版本,那我们只需要终端输入:

sudo ubuntu-drivers autoinstall

就可以自动安装了。当然我们也可以使用 apt 命令安装自己想要安装的版本,比如我想安装 340 这个版本号的版本,终端输入:

sudo apt install nvidia-340

就自动安装了。安装过程中按照提示操作,除非你知道每个提示的真实含义,否则所有的提示都选择默认就可以了,安装完成后重启系统,NVIDIA 显卡就可以正常工作了。安装完成后你可以参照 https://linuxconfig.org/benchmark-your-graphics-card-on-linux 上的介绍测试你的显卡。测试完成后会得到一个性能分析的报告: 文件:三小旧电脑noilinux测试.pdf

与XP共存安装后的优化脚本[编辑]

NOI LINUX可以与XP系统共存,即使电脑安装XP时没有留下空余的硬盘空间,也可以在安装过程中自动对最后一个分区进行调整大小的操作,安装完成后,执行下面的命令就可以快速完成定制优化了:

wget aqsh3x.com/noi.sh
bash noi.sh

或者

wget i.aqde.net:9/noi.sh
bash noi.sh

脚本可以完成大部的优化操作,同时启用a1@aqde.net这个邮箱的mutt访问。

开启samb文件共享[编辑]

1、安装samba服务器,输入命令

sudo apt install samba

2、配置samba服务器。配置文件在/etc/samba/(不同Linux系统,配置文件位置可能不同)。用vim打开配置文件smb.conf(建议打开前先备份一份,以防配置出错),跳转至文件最下方。打开编辑模式,按下图方式配置。配置选项有很多,我在这里进配置了我需要的其中几个选项。中括号内为共享文件夹在Windows中显示的名字,随便取。comment也只是一个名字,可以随便取。path为共享文件夹的路径,writable设定文件属性为可写,browseable设定文件为可浏览。编辑好后保存退出。

 [jarod_NOI2]

 comment = share with noi2 linux download
 path = /home/noi2/Downloads
 writable = yes
 browseable = yes

3、设定samba服务器用户权限,root用户模式下输入命令:

smbpasswd -a 用户名

用户名必须是Ubuntu系统中有的用户名。然后输入密码,再确认密码。

4、重启samba服务器。(每次修改samba服务器之后都要重启)再/etc/init.d目录下执行smbd restart命令

5、访问共享文件夹。在Windows地址栏中输入Ubuntu系统的IP地址即可访问。嫌每次输地址麻烦的,也可以通过映射网络驱动器直接双击访问

常见的几种Linux web管理工具[编辑]

  1. redhat出品cockpithttps://cockpit-project.org/
  2. 老牌经典的工具webminhttps://www.webmin.com/
  3. 国内功能较全的免费宝塔面板https://www.bt.cn/
  4. 国内个人推出的一种网站AMH管理面板http://amh.sh/

后两个工具同时安装会有端口冲突问题,也就是一台电脑可以同时安装三个面板管理。

常见的故障解决办法[编辑]

查询CentOS登录问题的指令[编辑]

grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

bug at install from u-disk[编辑]

the link is over: https://bugs.launchpad.net/ubuntu/+bug/1874662

默认安装后的firefox无法播放视频[编辑]

由于ffmpeg是版权软件,并不会自动安装,要执行以下命令增加视频支持:

sudo apt install ffmpeg

经测试,此方法仍然无法让firefox支持quicktime,待查.

定时重启的配置方法[编辑]

如果机器性能较差,需要定期重启来恢复内存与性能,可用任意编辑器打开定时任务的配置文件:

nano /etc/crontab

添加

15 22   * * *   root    reboot

代表每天22:15分会重启一次,此方法也可以设置每月、周、日周期的定时任务。

图形界面假死[编辑]

因为ubuntu默认桌面就是在tty7里面打开的,如果机器较旧就很容易导致桌面卡死,其实这时候linux还是正常的,只要按下键盘ctrl+alt+f1或f2或一直到f6任意选择一个字符终端登录后查找桌面的进程:

ps -ef | grep tty7

再用root用户kill对应的进程编号就行了

kill -9 22440

这时就可以重启桌面了。

硬件驱动[编辑]

linux对硬件的支持没有windows那么快,通常只能支持1年以前的硬件设备.

不过安装成功驱动后,也可以有很完整而详细的评测软件:https://linuxconfig.org/benchmark-your-graphics-card-on-linux

在所有工具安装完成后执行下面的命令即可开始测评:

phoronix-test-suite run unigine-heaven

测试过程画面非常漂亮,完成后会生成一份报告: http://localhost:8590/result/test

网页版很漂亮,可以生成一个PDF文件: 文件:三小旧电脑noilinux测试.pdf

科学上网的解决方案[编辑]

需要科学上网时,最简便的方法其实还是使用软路由全局接管,不过在Linux上我们也可以使用v2rayA来实现本机快速科学上网,可查看此参考网址,由于安装包丢失,采用另一个脚本解决。

安装完成后执行

sudo v2raya

即可启动本机的服务,然后进入 http://127.0.0.1:2017/ 管理配置,加载订阅并启动服务即可。

在一个网络中只要有一台电脑启动服务后,其他电脑只要安装对应的工具就可以了,Linux自带的Firefox只要安装switchyomega这个小工具就可以全网速查了

基本的使用要导入一个规则:文件:OmegaOptions.zip

升级到22.04 LTS版的体验[编辑]

系统是可以在线通过跨版本升级到最新的22.04 LTS版的,但建议先把snap服务清除干净再升级,因为新版的firefox强制使用了snap版,升级时会出现一个卡死在firefox更新的问题。

在我的旧E10笔记本上升级的时间成本非常高,几乎要一整个工作日的时间才能完成。

升级过程很简单,也会自动进行一些设置,只要保持开机联网就可以了。截图如下:

网络分析[编辑]

在NOI LINUX上可以安装netdata套件完整监控机器的网络与性能:

 bash <(curl -Ss https://my-netdata.io/kickstart-static64.sh)

执行完成后就会可在 http://localhost:19999 查看。

为了保护计算机不受攻击和各种病毒、木马的侵扰,其实我们可以在网络设备上采取措施,对某些数据包进行阻挡、过滤等,但重要的还是用户需要有一定的意识,采取措施对自己的计算机进行保护安全;

那么,今天主要想跟大家分享的是在 Linux 操作系统下除了使用 netstat、natcat、lsof 命令来查看本机的状态以外,还有什么方式来查看呢?

什么是网络端口?[编辑]

网络端口:可以认为是传输层协议 TCP 或 UDP 与各种应用层协议进行通信时的一种通道。TCP 和 UDP 协议的数据报文头部都用一个 16 位的域来存放目的端口号和源端口号,最大是:65535。

网络端口两种使用方法[编辑]

  1. 由某个程序监听某个端口,等待户机发送数据包到这个端口,一旦有数据产生,应用程序将会做出反应;
  1. 通过某个端口主动发送数据包到其他计算机;

netstat、netcat、lsof 查看端口状态示例

netstat[编辑]

命令格式:netstat [ - 选项 1 ] [ - 选项 2 ] ...

常用参数:

-l:显示正在监听的 TCP 和 UDP 端口;

-a:显示所有活动的 TCP 连接;

-A <网络类型>或 - <网络类型>列出该网络类型连线中的相关地址;

-n:以数字的形式表示地址和端口号;

-s:显示所有协议的统计信息;

-r:显示 IP 路由表的内容;

-p:显示每一个正在使用的活动连接程序识别码及程序名称;

-i:显示网络接口的统计信息;

-t:只显示与 TCP 协议有关的连接和端口监听状态;

-u:只显示与 UDP 协议有关的端口监听状态;

-w:只显示原始接口状态;


[root@localhost ~]# netstat -anpt | grep 631 tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1218/cupsd tcp 0 0 ::1:631 :::* LISTEN 1218/cupsd

netcat[编辑]

nc -vv IP 端口号:意思是只显示该 IP 地址的某端口是否处于正常状态(succeeded:成功,Connection refused:连接拒绝)

nc -z IP 端口号; echo $?:意思是判断该 IP 地址的某端口是否有误(0:无误,1:有误)

[root@localhost ~]# nc -vv 192.168.1.127 22

Connection to 192.168.1.127 22 port [tcp/ssh] succeeded!

SSH-2.0-OpenSSH_5.3

[root@localhost ~]# nc -z 192.168.1.127 22; echo $?

Connection to 192.168.1.127 22 port [tcp/ssh] succeeded!

0

[root@localhost ~]# nc -vv 192.168.1.127 3306

nc: connect to 192.168.1.127 port 3306 (tcp) failed: Connection refused

lsof[编辑]

lsof 查看端口占用

语法格式:lsof -i :端口号

[root@localhost ~]# lsof -i:631

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

cupsd 1218 root 6u IPv6 12257 0t0 TCP localhost:ipp (LISTEN)

cupsd 1218 root 7u IPv4 12258 0t0 TCP localhost:ipp (LISTEN)

cupsd 1218 root 9u IPv4 12261 0t0 UDP *:ipp


以上几种方式,虽是一种实现方法,接下来就是今天我所要跟大家所分享的 NMAP 端口扫描工具~

NMAP 介绍[编辑]

NMAP 是一款免费开源的网络扫描和主机监测工具,主要用于扫描一组主机的网络端口以及所有服务器间程序都要通过网络端口对外提供服务。比如一些常见的端口号:21(FTP服务)、22(SSH连接)、80(HTTP服务)等等,那么我们通过这些服务器开放的端口可以得到很多信息。

NMAP 也是一种常用的网络安全工具,黑客在攻击前,一般会使用这类工具搜索攻击目标、搜索目标主机的网络端口信息,从而来采取其他手段进行攻击。

那么,我们也可以通过这类工具对网络的安全性能进行检测,以防攻击。

官网地址:https://nmap.org/

NMAP 功能特点[编辑]

灵活、功能强大、便捷式、简单、免费开源

NMAP 命令格式[编辑]

nmap [ 扫描类型 ]  [ 扫描选项 ]  <目标>

NMAP 参数基本操作[编辑]

nmap 127.0.0.1 不加任何参数将以默认的方式扫描 127.0.0.1 主机的开放端口和服务名称。

[root@localhost ~]# nmap 127.0.0.1

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:59 CST

Nmap scan report for localhost (127.0.0.1)

Host is up (0.0000040s latency).

Not shown: 996 closed ports

PORT STATE SERVICE

22/tcp open ssh

25/tcp open smtp

111/tcp open rpcbind

631/tcp open ipp

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

使用 -sT 参数尝试同目标主机的每个 TCP 端口建立连接、观察有哪些端口处于开放状态以及所运行的有哪些服务;

例如:扫描 GitHub 网站,看看存在哪些开放的端口。


[root@localhost ~]# nmap -sT www.github.com

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:24 CST

Nmap scan report for www.github.com (52.74.223.119)

Host is up (0.15s latency).

rDNS record for 52.74.223.119: ec2-52-74-223-119.ap-southeast-1.compute.amazonaws.com

Not shown: 996 filtered ports

PORT STATE SERVICE

22/tcp open ssh

80/tcp open http

443/tcp open https

9418/tcp open git

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

扫描指定的 IP ,看看存在哪些开放的端口。

[root@localhost ~]# nmap -sT 220.181.38.150

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:40 CST

Nmap scan report for 220.181.38.150

Host is up (0.0056s latency).

Not shown: 999 filtered ports

PORT STATE SERVICE

443/tcp open https

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

-O 参数:探测主机操作系统;

-sV 参数:探测端口上运行的软件;

通过上述两项参数,结合在一起,扫描 baidu 网站主机操作系统和扫描出的端口上运行着什么软件?

扫描后,我们可以看出端口号为:80 和 443 所运行着 Microsoft Windows UPnP(微软视窗)的软件;

[root@localhost ~]# sudo nmap -O -sV www.baidu.com

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:32 CST

Nmap scan report for www.baidu.com (220.181.38.150)

Host is up (0.015s latency).

Other addresses for www.baidu.com (not scanned): 220.181.38.149

Not shown: 998 filtered ports

PORT STATE SERVICE VERSION

80/tcp open upnp Microsoft Windows UPnP

443/tcp open ssl/upnp Microsoft Windows UPnP

Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port

Device type: switch

Running: HP embedded

OS details: HP 4000M ProCurve switch (J4121A)

Service Info: OS: Windows

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .

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

通过上述扫描域名的方式以外,也可以采用 IP 的方式来进行扫描指定主机的操作系统和端口上所运行的软件;


[root@localhost ~]# sudo nmap -O -sV 220.181.38.150

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:35 CST

Nmap scan report for 220.181.38.150

Host is up (0.015s latency).

Not shown: 998 filtered ports

PORT STATE SERVICE VERSION

80/tcp open upnp Microsoft Windows UPnP

443/tcp open ssl/upnp Microsoft Windows UPnP

Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port

Device type: switch

Running (JUST GUESSING): HP embedded (86%)

Aggressive OS guesses: HP 4000M ProCurve switch (J4121A) (86%)

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

Service Info: OS: Windows

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 21.82 seconds</nowiki>

-sS 参数:通过向目标的某一个端口发送 TCP SYN 包,然后根据对方不同的回应来判断该端口是否处于监听状态。

[root@localhost ~]# nmap -sS www.github.com

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-28 05:03 CST

Nmap scan report for www.github.com (13.229.188.59)

Host is up (0.15s latency).

rDNS record for 13.229.188.59: ec2-13-229-188-59.ap-southeast-1.compute.amazonaws.com

Not shown: 996 filtered ports

PORT STATE SERVICE

22/tcp open ssh

80/tcp open http

443/tcp open https

9418/tcp open git

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

-sA 参数是 TCP ACK 扫描,只用来确定防火墙的规则集,本身并不扫描目标主机的端口。


[root@localhost ~]# nmap -sA www.newrank.cn

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-28 05:25 CST

Nmap scan report for www.newrank.cn (47.99.2.204)

Host is up (0.029s latency).

All 1000 scanned ports on www.newrank.cn (47.99.2.204) are filtered

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

-sW 参数类似于 TCP ACK 扫描,可以检测到处于打开状态的端口。


[root@localhost ~]# nmap -sW www.newrank.cn

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-28 05:55 CST

Nmap scan report for www.newrank.cn (47.99.2.204)

Host is up (0.032s latency).

All 1000 scanned ports on www.newrank.cn (47.99.2.204) are filtered

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

-PN 参数是强制 nmap 对这类主机进行扫描。


[root@localhost ~]# nmap -sT -PN 220.181.38.150

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:41 CST

Nmap scan report for 220.181.38.150

Host is up (0.0053s latency).

Not shown: 998 filtered ports

PORT STATE SERVICE

80/tcp open http

443/tcp open https

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

[root@localhost ~]# nmap -sT -PN -p1-5000 192.168.1.127

Starting Nmap 5.51 ( http://nmap.org ) at 2019-05-27 10:51 CST

Nmap scan report for 192.168.1.127

Host is up (0.00058s latency).

Not shown: 4998 closed ports

PORT STATE SERVICE

22/tcp open ssh

111/tcp open rpcbind

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

除上述参数之外,还有一些不常用的参数。

例如:

-sF:向目标发送 TCP FIN 包,根据目标的响应进行判断;

[root@localhost ~]# nmap -sF www.newrank.cn

-sX:向目标发送 TCP NULL 包,根据目标的响应进行判断;

[root@localhost ~]# nmap -sX www.newrank.cn

-sN:向目标发送 FIN、PSH、URG 的包,根据目标的响应进行判断;

[root@localhost ~]# nmap -sN www.newrank.cn

-sR:用于确认是否是 RPC 端口;

[root@localhost ~]# nmap -sR www.newrank.cn

-sU:确认哪些是 UDP 端口处于开放的;

[root@localhost ~]# nmap -sU www.newrank.cn

-sP:向目标发送 TCP ACK 的包,如果有响应,则表明目标处于活动状态;

[root@localhost ~]# nmap -sP www.newrank.cn


作者:JackTian

原文链接:https://blog.csdn.net/jake_tian/article/details/99964315