linux中国_ 发布的文章

简介

Linux From Scratch,简称 LFS,不同于其它的 Linux 发行版,它是一种给使用者指导建议,由使用者自行从头开始自己构建的发行版。LFS 发行版及其衍生版本,都由其同名的手册提供了完整的指导建议。

《Linux From Scratch》(LFS)是由 Gerard Beekmans 等人编写的。这本书可以从在Linux From Scratch网站上免费下载到,当前最新的版本为 8.1。

尽管目标是安装一个与现有发行版毫无关系的系统,安装LFS仍然不能无中生有,而必须要有一个可以编译软件包的运行中的Linux系统。这个系统一般称为宿主系统。在宿主操作系统上安装LFS,需要的基本步骤如下:

  • 准备新分区(第二章)
  • 软件包与补丁(第三章)
  • 最后的准备(第四章)
  • 构建临时文件系统(第五章)
  • 安装基本的系统软件(第六章)
  • 基本系统配置(第七章)
  • 让 LFS 系统可引导(第八章)

LFS 的官方网站是: http://www.linuxfromscratch.org/

相关项目

该项目有很多相关子项目:

Beyond Linux From Scratch(BLFS)

标准LFS仅仅安装了足够让系统启动的基本软件,以及使新系统能够编译新软件包的开发工具。BLFS包括了更多的软件包,且都有相应指导。

Crosss Linux From Scratch(CLFS)

为需要进行交叉编译(即在一个平台上编译另一个平台的代码)的用户提供指导,正式版本为1.0,另有两个变种

  • CLFS Sysroot 采用Sysroot的方法来进行编译,好处是软件包的编译次数可以减少,坏处是不能支持在编译后对软件进行测试,必须要启动到目标平台上才能测试。
  • CLFS Embedded 一般用于极小系统以及嵌入式系统。为此,它使用uclibc而不是一般LFS使用的glibc

Automated Linux From Scratch(ALFS)

标准LFS只是一本书,用户需要根据书上的指引下载软件包并手动输入指令进行编译。ALFS子项目提供了把这一切自动化的脚本。

Hardened Linux From Scratch(HLFS)

这个子项目致力于打造在安全性上无懈可击的Linux系统。

当前版本

LFS 的当前版本是 8.1,分为采用 systemd 的版本和不采用的版本。

手册

Systemd 版本:

Systemd 版本(简体中文翻译版本):

LCTT 对 LFS 7.1 systemd 版本进行了翻译,并且 LFS 官方网站收录了相应链接:

非 Systemd 版本:

注:部分资料来自维基百科。

简介

Fedora Linux(第七版以前为 Fedora Core)是较具知名度的 Linux 发布包之一,由 Fedora 项目社区开发、红帽公司赞助,目标是创建一套新颖、多功能并且自由(开放源代码)的操作系统。

Fedora 基于 Red Hat Linux,在Red Hat Linux终止发布后,红帽公司项目以 Fedora 来取代 Red Hat Linux 在个人领域的应用,而另外发布的 Red Hat Enterprise Linux(Red Hat企业版Linux)则取代 Red Hat Linux 在商业应用的领域。

Fedora 对于用户而言,是一套功能完备、更新快速的免费操作系统。而对赞助者 Red Hat 公司而言,它是许多新技术的测试平台,被认为可用的技术最终会加入到 Red Hat Enterprise Linux 中。

Fedora 大约每六个月发布新版本,目前 Fedora 最新的版本是Fedora 27。

官方网站: http://fedoraproject.org/

下载

Fedora 27 Workstation Live

Fedora Workstation Live 镜像让您可以为自己电脑制作完整的立即可用的 Fedora Workstation 系统介质。您可以使用 Live 镜像测试、体验 Fedora,同时无需改动硬盘内容。当您满意之后,您可以从 Live 镜像安装 Fedora 到您的硬盘。要使用该镜像,您需要可创建或刻录 DVD 的驱动器或者至少跟镜像大小一样的 USB 闪存盘。版本 27 之后就不再提供 32 位的 Live 安装镜像了,需要安装 32 位的 27 版本只能通过网络安装。

  • Intel & AMD/ 兼容 PC 64 位,适用于 64-bit 位 PC 点此下载

Fedora 27 Server

Fedora Server 安装镜像可让您为计算机制作介质以便引导安装程序将 Fedora Server 直接安装到您的硬盘。

  • Intel & AMD/ 兼容 PC 64 位,适用于 64-bit 位 PC 点此下载

发行

Fedora 项目以不同方式发行 Fedora:

  • Fedora DVD/CD – 包含了所有主要软件包的DVD或CD套装;
  • Live镜像 – CD或DVD大小的光盘镜像,可用于创建Live CD或从USB设备启动,并可选安装到硬盘;
  • 最小CD – 用于通过HTTP,FTP或NFS安装。

您可以通过 Fedora Live USB Creator 或 UNetbootin 创建 Live USB 版本的 Fedora。

同时,Fedora 项目发布自定义的 Fedora 版本,称作 Fedora spins。这些版本包含特定的软件包集合,还有各种桌面环境,如 KDE Plasma、Xfce、LXDE、MATE和Cinnamon,以满足特定种类的用户之需要。Fedora spins 由一些对 Fedora 有特殊兴趣的小组开发。

Enterprise Linux额外软件包 Extra Packages for Enterprise Linux,EPEL 是由来自 Fedora Project 的志愿者发起的社区力量,为了创建由高质量的附加软件组成的、用于补足 RHEL 和其他兼容版本的软件仓库。

Fedora 主要使用 RPM 软件包管理系统。Fedora 同样提供图形界面(例如pirut,pup和puplet),用于在更新可用时提供视觉通知。apt-rpm 是 yum 的替代品,对于Debian类发行版的用户来说可能更熟悉。这里,APT被用于管理软件包。 额外的软件仓库(EPEL)可以被添加到 Fedora,以便安装 Fedora 软件仓库未提供的软件包。

测试版

Fedora Project在发布每一个稳定版本之前,会先发布三次测试版本让用户测试并协助改进。Fedora 7 由于要合并 Core 和 Extra,引入了第四个测试版。

Fedora 另外还有个用来放置不稳定(Bleeding-Edge)软件的包库称为Rawhide,开发中的软件包会先发布在 Rawhide,然后再转移至 Fedora 包库。Rawhide 更新相当频繁,并不适合一般工作用途,但还是有些开发者和测试者用来作主要的工作系统。

当前版本

最新的Fedora版本为 27,有“Server”、“Cloud”和“Workstation”三个版本,发布于 2017 年 11 月 14 日。 详情说明请浏览官方的 Fedora 27 Release Note

特色

与Red Hat Linux的相似度

Fedora 承继了 Red Hat Linux 的安装接口Anaconda、桌面环境(同时包含 Gnome 和 KDE)、包管理器RPM、多国语系支持以及许多设置工具,所以习惯于使用 Red Hat 操作系统的用户会感到相当熟悉,也因为如此,Fedora 用户在转移至RHEL、CentOS 等系统时不会面临太多差异。

引入新技术

因其趋近半年一次的发布周期,Fedora 在引入新技术的部分颇为快速,通常每一个版本都会引入最新版的 Xorg、Gnome 以及 KDE。

自由软件的推广

Fedora Project 在自由软件的推广上有积极的作为。其内置自由软件的 GNU Java 运行环境 libgcj 可成功运行 Eclipse 等Java 软件,而不需使用 Oracle 的 Java 运行环境。另外 Fedora 官方也不支持专利封闭的多媒体格式(如MP3等),并建议用户支持诸如 Ogg 等开放的多媒体格式。

Fedora Core 5 引入了 Mono 项目,Mono 是开放源代码且跨平台的 .NET 运行环境与开发工具。

软件包

Fedora 使用yum工具来协助RPM包的管理,可以有效避免相依性地狱的问题。并且,用户可以利用yum来方便获取原先Fedora 因专利权因素所不包含的功能,例如:MP3播放支持、DVD视频支持以及NTFS文件系统支持等功能。Fedora 21 及其之前的版本默认使用 yum,而在 Fedora 22 及之后的版本默认使用 DNF 。DNF 由 yum 分支出来,DNF 将会取代老旧的 yum。

Fedora的官方包库在收纳上有其多样性,例如 ClamAV(杀毒软件)与 Wine(Windows软件转译器)都可在官方包库中获取,另外也包含许多开放源代码的游戏软件。livna 和 freshrpms 等社区也提供了和官方包库兼容的第三方包,用户可从中获取 NVIDIA 和 ATI 的 3D 显卡驱动程序或是 VLC、MPlayer 等播放软件。

多平台支持

Fedora 官方支持 x86、x86-64 以及 PowerPC 处理器,游戏机方面,Fedora Core 5、Fedora Core 6、Fedora 7 也已成功安装在 PlayStation 3 上。

简化目录结构

一直以来 unix 及类 unix 系统的目录结构对于很多人显得晦涩难懂,Fedora 计划简化其目录结构,将二进制文件集中放在 /usr/bin,将库文件集中到/usr/lib 和 /usr/lib64,而对于原本同样用于存储二进制文件的 /bin 和 /sbin 将以连接的形式指向 /usr/bin,同样的 /lib /lib64 也会以连接形式指向对应目录。示意如下:

/  
|-- etc 
|-- usr
|-- bin
|-- lib
|-- lib64
|-- run
|-- var
|-- bin -> usr/bin
|-- sbin -> usr/bin
|-- lib -> usr/lib
|-- lib64 -> usr/lib64

历史

Fedora版本命名规则:第n版与第n+1版有继承关系,但与第n+2版没有相同继承关系。

版本列表

名称版本发布日期终止日期内核版本XorgGNOMEKDE
Fedora272017-11-14-4.1311.03.26Plasma5.11.3
262017-7-11-4.11-3.24-
252016-11-222017-12-124.8-3.22-
242016-6-212017-8-84.5-3.20-
232015-11-32016-12-204.2-3.18-
222015-5-262016-7-194.01.173.16Plasma5.3
Applications 15.04
212014-12-92015-12-13.161.163.144.14
20(Heisenbug)2013-12-172015-6-233.111.143.104.11
19(Schrödinger's Cat)2013-7-22015-1-63.91.143.84.10
18(Spherical Cow)2013-1-152014-1-43.61.133.64.9
17(Beefy Miracle)2012-5-292013-2-123.3.41.123.44.8
16(Verne)2011-11-82013-2-123.1.01.11.13.2.14.7.3
15(Lovelock)2011-5-242012-6-262.6.381.10.13.04.6
14(Laughlin)2010-11-22011-12-82.6.351.9.12.324.5.2
13(Goddard)2010-5-252011-6-242.6.331.8.02.304.4.2
12(Constantine)2009-11-172010-12-22.6.311.7.12.28.04.3.2
11(Leonidas)2009-6-92010-6-252.6.29.41.62.26.14.2.2
10(Cambridge)2008-11-252009-12-182.6.271.5.22.24.14.1.2
9(Sulphur)2008-5-132009-7-102.6.251.4.992.22.14.0.3
8(Werewolf)2007-11-82009-1-72.6.23.11.3.02.20.13.5.8
7(Moonshine)2007-5-312008-6-132.6.211.3.02.18.03.5.6
Fedora Core6(Zod)2006-10-242007-12-72.6.181.1.12.16.03.5.4
5(Bordeaux)2006-3-202007-7-22.6.151.0.12.14.03.5.1
4(Stentz)2005-6-132006-8-72.6.116.8.22.10.03.4.0
3(Heidelberg)2004-11-82006-1-162.6.96.8.12.8.13.3.0
2(Tettnang)2004-5-182005-4-112.6.56.7.02.6.03.2.2
1(Yarrow)2003-11-52004-9-202.4.194.3.0 (XFree86)2.4.03.1.4

注:由于 Feodra 每个版本在整个支持周期内会更新上述程序,所以上述表格的程序版本只是该本版发布初始的软件版本

注:部分资料来自维基百科。

简介

Ubuntu 基于 Debian 发布版和 GNOME 桌面环境,与 Debian 的不同在于它每6个月会发布一个新版本,每2年发布一个 LTS 长期支持版本。 普通的桌面版可以获得发布后 18 个月内的支持,标为 LTS(长期支持)的桌面版可以获得更长时间的支持。自 Ubuntu 12.04 LTS 开始,桌面版和服务器版均可获得为期5年的技术支持。

Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。Ubuntu 现今具有庞大的社区力量,用户可以方便地从社区获得帮助。

Ubuntu 在 Ubuntu 12.04 的发布页面上使用了“友帮拓”一词作为其官方的中文译名。之前曾一些中文用户使用班图、乌班图、乌斑兔、乌帮图、笨兔等作为非官方译名。

Ubuntu 的 Ubuntu Touch 项目于 2011 年启动,并在 2013 年推出了新产品 Ubuntu Phone OS 和 Ubuntu Tablet,意图统一桌面设备和移动设备的屏幕。但是在2017年4月,Ubuntu 的创立者 Mark Shuttleworth 宣布该项目将会终止。

下载

16.04.2 LTS

桌面版本可以从此下载:http://www.ubuntu.com/download/desktop

  • Intel & AMD/ 兼容 PC 64 位 点此下载
    (MD5: 1400884cec8e40a1a876b2678f81494b)
  • Intel & AMD/ 兼容 PC 32 位 点此下载
    (MD5: e14b5f2177b00dac3edc94b0e806f857)

服务器版本可以从此下载:http://www.ubuntu.com/download/server

  • Intel & AMD/ 兼容 PC 64 位 点此下载
    (MD5: 2bce60d18248df9980612619ff0b34e6)
  • Intel & AMD/ 兼容 PC 32 位 点此下载
    (MD5: c32ba78bf6bdae6627b1e717d33eb7ae)

17.04

桌面版本可以从此下载:http://www.ubuntu.com/download/desktop

  • Intel & AMD/ 兼容 PC 64 位 点此下载
    (MD5: 18cc54af55d7ca931bbb8588e8d9c1bd)
  • Intel & AMD/ 兼容 PC 32 位 点此下载
    (MD5: eb6c4ea889f5ab44f77c9d1cde6a8818)

服务器版本可以从此下载:http://www.ubuntu.com/download/server

  • Intel & AMD/ 兼容 PC 64 位 点此下载
    (MD5: 4672ce371fb3c1170a9e71bc4b2810b9)
  • Intel & AMD/ 兼容 PC 32 位 点此下载
    (MD5: 8e82de7efa4b1bf159b4be325e952eb1)

发行

软件包

Ubuntu 的包管理系统与 Debian 的类似,所有软件分为 main、restricted、universe 和 multiverse 等 4 类。

main 即“基本”组件,其中只包含符合 Ubuntu 的许可证要求并可以从 Ubuntu 团队中获得支持的软件,致力于满足日常使用,位于这个组件中的软件可以确保得到技术支持和及时的安全更新。此组件内的软件是必须符合 Ubuntu版权要求 Ubuntu license requirements 的自由软件,而 Ubuntu 版权要求大致上与 Debian自由软件指导纲要 Debian Free Software Guidelines 相同。

restricted 即“受限”组件,其中包含了非常重要的,但并不具有合适的自由许可证的软件,例如只能以二进制形式获得的显卡驱动程序。由于 Ubuntu 开发者无法获得相应的源代码,restricted 组件能够获得的支持与main组件相比是非常有限的。

universe 即“社区维护”组件,其中包含的软件种类繁多,均为自由软件,但都不为 Ubuntu 团队所支持。

multiverse 即“非自由”组件,其中包括了不符合自由软件要求而且不被 Ubuntu 团队支持的软件包,通常为商业公司编写的软件。

版本更新

Ubuntu 的新版一旦发布,该版本的包库就会被冻结,此后只对该包库提供安全性更新。

安装软件时可以通过运行 apt-get 命令,或使用图形接口的 Synaptic 工具或“软件中心”来完成。与 Windows 不同,Ubuntu 的用户通常不必四处搜索、逐一下载或购买相应的安装程序。Ubuntu 能够使用的软件大多存放在被称为“软件源”的服务器中,用户只要运行相应的 apt-get 指令(或使用 Synaptic 工具进行相关操作),系统就会自动查找、下载和安装软件了。

虽然 Ubuntu 主要采用自由软件,但也接纳部分可以自由散发的私有软件,并将它们放在 multiverse 组件中。Ubuntu 还为第三方软件设立了认证程序。

Ubuntu 每6个月发布一个新版,每个版本都有代号和版本号。版本号源自发布日期,例如第一个版本,4.10,代表是在2004 年 10 月发布的。

Ubuntu 官方认可的分支系统众多,其主要差异在于使用的桌面系统不同,而内部的默认软件也会有所歧异。此外尚有许多基于 Ubuntu 的非官方派生版本,还有基于 Ubuntu 开发的发布版。

所谓的 Ubuntu 系统,指的是默认的 Ubuntu 版本,采用母公司研发的Unity界面。11.04版以及之前支持Gnome桌面环境。

正式派生版本

正式派生版本统一使用和Ubuntu一样的软件包 目前Ubuntu正式支持的派生版本包括:

  • Kubuntu:采用KDE作为默认的桌面环境,以满足偏爱KDE的Ubuntu用户。
  • Edubuntu:为教育量身定做,包含很多教育软件,可以帮助教师方便的搭建网络学习环境,管理电子教室。采用Unity界面。
  • Xubuntu:属于轻量级发行版,使用Xfce4作为默认的桌面环境。
  • Lubuntu:使用LXDE桌面环境的轻量级发行版,从10.04版本开始正式发行。
  • Ubuntu Server Edition:自Ubuntu 5.10版(Breezy Badger)起,与桌面版同步发行,可当作多种软件服务器,如电子邮件服务器、基于LAMP的Web网站服务器、DNS服务器、文件服务器与数据库服务器等。服务器版通常不预装任何桌面环境,与桌面版本相比,占用空间少,运行时对硬件要求较低,最少只需要500MB硬盘空间和64MB内存。
  • Ubuntu Studio:适合于音频,视频和图像设计的版本。使用Xfce4作为默认的桌面环境。
  • Mythbuntu:一套基于Ubuntu的面向媒体中心电脑的发行版,Mythbuntu=MythTV+Ubuntu,MythTV是其中关键的软件包,用于实现媒体中心等功能。它没有包含一些不必要的程序,如OpenOffice, Evolution和完全安装的Gnome。
  • Ubuntu Kylin(优麒麟):语言的默认设置为中文,为中国用户专门定制。
  • Ubuntu GNOME:使用 GNOME 桌面环境的派生版。
  • Ubuntu Budgie : 使用 Budgie 桌面环境的派生版
  • Ubuntu for Android:在 Android 手机上运行的 Ubuntu。
  • Ubuntu Touch:基于 Ubuntu 和 Android 的手机/平板操作系统。
  • Ubuntu TV:用于智能电视的版本。

当前版本

当前最新版本是 17.10 ,代号是 Zesty Zapus ,发布于 2017-04-13。

历史

Ubuntu每6个月发布一个新版,每个版本都有代号和版本号。版本号源自发布日期,例如第一个版本,4.10,代表是在2004年10月发布的。下表列出了以前和计划中的发布:

版本开发代号发布日期最近更新支持情况内核版本
桌面版服务器版
4.10Warty Warthog2004-10-20 2006-04-302.6.8
5.04Hoary Hedgehog2005-04-08 2006-10-312.6.10
5.10Breezy Badger2005-10-13 2007-04-132.6.12
6.06 LTSDapper Drake2006-06-016.06.2发布于2008年1月21日2009-07-142011-06-012.6.15
6.10Edgy Eft2006-10-26 2008-04-252.6.17
7.04Feisty Fawn2007-04-19 2008-10-192.6.20
7.10Gutsy Gibbon2007-10-18 2009-04-182.6.22
8.04 LTSHardy Heron2008-04-248.04.4发布于2010年1月29日2011-05-122013-05-092.6.24
8.10Intrepid Ibex2008-10-30 2010-04-302.6.27
9.04Jaunty Jackalope2009-04-23 2010-10-232.6.28
9.10Karmic Koala2009-10-29 2011-04-302.6.31
10.04 LTSLucid Lynx2010-04-2910.04.4发布于2012年2月16日2013-05-092015-042.6.32
10.10Maverick Meerkat2010-10-10 2012-04-102.6.35
11.04Natty Narwhal2011-04-28 2012-10-282.6.38
11.10Oneiric Ocelot2011-10-13 2013-05-093.0
12.04 LTSPrecise Pangolin2012-04-2612.04.4发布于2014年2月6日2017-043.2
12.10Quantal Quetzal2012-10-18 2014-05-163.5
13.04Raring Ringtail2013-04-25 2014-01-273.8
13.10Saucy Salamander2013-10-17 2014-073.11
14.04 LTSTrusty Tahr2014-04-17 2019-043.13
14.10Utopic Unicorn2014-10-23 2015-073.16
15.04Vivid Vervet2015-04-23 2016-013.19
15.10Wily Werewolf2015-10-22 2016-074.2
16.04Xenial Xerus2016-04-2116.04.2发布于2017年2月17日2021-044.4
16.10Yakkety Yak2016-10-13 2017-074.8
17.04Zesty Zapus2017-04-13 2018-014.10

长期支持版本

长期支持版本(LTS),更新维护的时间比较长,约2年会推出一个LTS版本。最新的长期支持版本为 2016 年 4 月21 日推出的 16.04 LTS。

版本代号命名

Ubuntu 版本的命名规则是根据正式版发布的年月命名,Ubuntu 8.10 也就意味着 2008年10月发布的 Ubuntu,研发人员与用户可从版本号码就知道正式发布的时间。Ubuntu 各版本的代号固定是形容词加上动物名称,而且这2个词的英文首字母一定是相同的。从 Ubuntu 6.06 开始,两个词的首字母按照英文字母表的排列顺序取用。

  • Ubuntu 4.10 - Warty Warthog(多疣的疣猪)
  • Ubuntu 5.04 - Hoary Hedgehog(白发的刺猬)
  • Ubuntu 5.10 - Breezy Badger(活泼的獾)
  • Ubuntu 6.06 - Dapper Drake(整洁的公鸭)
  • Ubuntu 6.10 - Edgy Eft(尖利的小蜥蜴)
  • Ubuntu 7.04 - Feisty Fawn(烦躁不安的鹿)
  • Ubuntu 7.10 - Gutsy Gibbon(胆大的长臂猿)
  • Ubuntu 8.04 - Hardy Heron(坚强的鹭)
  • Ubuntu 8.10 - Intrepid Ibex(无畏的羱羊)
  • Ubuntu 9.04 - Jaunty Jackalope(活泼的鹿角兔)
  • Ubuntu 9.10 - Karmic Koala(幸运的树袋熊)
  • Ubuntu 10.04 - Lucid Lynx(清醒的猞猁)
  • Ubuntu 10.10 - Maverick Meerkat(标新立异的的狐獴)
  • Ubuntu 11.04 - Natty Narwhal(敏捷的独角鲸)
  • Ubuntu 11.10 - Oneiric Ocelot(有梦的虎猫)
  • Ubuntu 12.04 - Precise Pangolin(精准的穿山甲)
  • Ubuntu 12.10 - Quantal Quetzal(量子的格查尔鸟)
  • Ubuntu 13.04 - Raring Ringtail(卯足了劲的环尾猫熊)
  • Ubuntu 13.10 - Saucy Salamander(活泼的蝾螈)
  • Ubuntu 14.04 - Trusty Tahr(可靠的塔尔羊)
  • Ubuntu 14.10 - Utopic Unicorn(乌托邦的独角兽)
  • Ubuntu 15.04 - Vivid Vervet(活泼的长尾黑颚猴)
  • Ubuntu 15.10 - Wily Werewolf(狡诈的狼人)
  • Ubuntu 16.04 - Xenial Xerus(好客的非洲地松鼠)
  • Ubuntu 16.10 - Yakkety Yak(小牦牛)
  • Ubuntu 17.04 - Zesty Zapus(北美跳鼠)

主要程序的版本

核心桌面
版本Linux内核Xorg /X.OrgWaylandPythonPerlGNOMEFirefoxOpenOfficeLibreOfficeGIMPPidginPiTiVi
4.102.6.8(XFree86 4.3)不适用2.3.45.8.42.80.91.1.2不适用2.0.21.0.0不适用
5.042.6.10(6.8.2)不适用2.4.15.8.42.101.0.21.1.3不适用2.2.21.1.4不适用
5.102.6.12(6.8.2)不适用2.4.25.8.72.121.0.72.0不适用2.2.81.5.0不适用
6.062.6.151.0.2 / 7.0.0不适用2.4.25.8.72.141.5.32.0.2不适用2.2.111.5.00.10.0
6.102.6.171.1.1 / 7.1.1不适用2.4.35.8.82.162.0.02.0.4不适用2.2.132.0b30.10.1
7.042.6.201.2.0 / 7.2不适用2.5.1rc15.8.82.182.0.32.2.0不适用2.2.132.0b60.10.2
7.102.6.221.3.0 / 7.2不适用2.5.15.8.82.202.0.62.3.0不适用2.4.0rc32.2.10.10.3
8.042.6.241.4.1 / 7.3不适用2.5.25.8.82.223.0b52.4.0不适用2.4.52.4.10.11.1
8.102.6.271.5.2 / 7.4不适用2.5.25.10.02.243.0.32.4.1不适用2.6.12.5.20.11.1
9.042.6.281.6.0 / 7.4不适用2.6.25.10.02.263.0.83.0.1不适用2.6.62.5.50.11.3
9.102.6.311.6.4 / 7.4不适用2.6.4rc15.10.02.283.5.33.1.1不适用2.6.72.6.20.13.3
10.042.6.32 (DRM from 2.6.33)1.7.6 / 7.5不适用2.6.55.10.12.303.6.33.2.0不适用2.6.82.6.60.13.4
10.102.6.351.9.0 / 7.5不适用2.6.65.10.12.323.6.103.2.1不适用2.6.102.7.30.13.5
11.042.6.381.10.1 / 7.60.12.7.15.10.12.32.14.0不适用3.3.22.6.112.7.110.13.5
11.103.01.10.4 / 7.60.1.02.7.25.12.43.27.0不适用3.4.32.6.112.10.00.15
12.043.2.141.11.4 / 7.60.852.7.35.14.23.411.0不适用3.5.12.6.122.10.10.15
12.103.5.51.13.0 / 7.70.95.02.7.35.14.23.616.0.1不适用3.6.2rc22.8.22.10.60.15
13.043.8.81.13.30.95.03.35.14.23.620.0不适用4.02.8.42.10.70.15.2
13.103.11.01.14.31.1.02.7.55.14.23.824.0不适用4.1.2rc32.8.62.10.70.15.2

注:部分资料来自维基百科。

经常有新接触 Linux 的同学问,“Linux 从哪里下载啊?”这种问题,对于熟手来说要么不屑一提,要么就引来了各种 Linux 发行版之争,让初学者无所适从。

其实,对于新接触 Linux 的人来说,很多人都不知道 “Linux” 原来不是一个!而是有林林总总上千种发行版,甚至你乐意的话,都可以制作发行自己的发行版。而各种不同的发行版也各有特色,还层出不穷的推出新版本。这简直让初学者如置身森林,茫然不知所措~

所以,这里我整理了一份最新、最热的 Linux 发行版的下载链接,可以让初学者能够快速领略到 Linux 的风采。

简单的来说,Linux 是以 Linux 内核 Kernel 为基础,集成了各种开源软件、和/或商业软件的一个操作系统。这个将各个组件整合成一个完整的操作系统过程就称之为“制作发行版”,因此,不同的组织/公司和个人就可以制作各具特色的、可以安装或运行的操作系统的软件包——通常是 ISO 镜像——可以刻录到光盘、写入到 USB 启动盘、或者直接通过 ISO 文件来安装/运行。

一般来说,初接触 Linux,从桌面版开始比较好,几个主流的发行版,都可以尝试一下,如 Ubuntu、Debian、Fedora、CentOS、openSUSE 等;而 Linux 的一个重要领域——服务器领域——可以在你对 Linux 有了初步认识之后,再来学习和了解。当然,往往一个 Linux 发行版会同时发布桌面版和服务器版,其使用习惯也相近,所以熟悉桌面版之后,对使用和维护其相应的服务器版本会更容易一些。

好了,言归正传,您可以从下面挑个顺眼的下载安装试试了,建议你各种都体验下,最后你会选定一个适合你的!

Ubuntu

是当前最流行的 Linux 发行版之一,是 Debian Linux 的主要衍生版本,用户众多,以桌面系统所著称,适于刚刚接触 Linux 的初学者。

对于新手,安装 Ubuntu 可以参考《新手指南: 手把手教你安装 Ubuntu 和 Fedora》。

16.04.2 LTS

桌面版本可以从此下载:http://www.ubuntu.com/download/desktop

  • Intel & AMD/ 兼容 PC 64 位 点此下载
    (MD5: 1400884cec8e40a1a876b2678f81494b)
  • Intel & AMD/ 兼容 PC 32 位 点此下载
    (MD5: e14b5f2177b00dac3edc94b0e806f857)

服务器版本可以从此下载:http://www.ubuntu.com/download/server

  • Intel & AMD/ 兼容 PC 64 位 点此下载
    (MD5: 2bce60d18248df9980612619ff0b34e6)
  • Intel & AMD/ 兼容 PC 32 位 点此下载
    (MD5: c32ba78bf6bdae6627b1e717d33eb7ae)

17.04

桌面版本可以从此下载:http://www.ubuntu.com/download/desktop

  • Intel & AMD/ 兼容 PC 64 位 点此下载
    (MD5: 18cc54af55d7ca931bbb8588e8d9c1bd)
  • Intel & AMD/ 兼容 PC 32 位 点此下载
    (MD5: eb6c4ea889f5ab44f77c9d1cde6a8818)

服务器版本可以从此下载:http://www.ubuntu.com/download/server

  • Intel & AMD/ 兼容 PC 64 位 点此下载
    (MD5: 4672ce371fb3c1170a9e71bc4b2810b9)
  • Intel & AMD/ 兼容 PC 32 位 点此下载
    (MD5: 8e82de7efa4b1bf159b4be325e952eb1)

Fedora

在 Red Hat Linux 终止发布后,由 RedHat 推出的替代品,在新技术方面跟进较快。是 RedHat 系列的典型代表,和 CentOS / RHEL 源出一脉,如果将来使用 CentOS 作为服务器,使用 Fedora 作为个人桌面使用比较习惯。

对于新手,安装 Fedora 可以参考《新手指南: 手把手教你安装 Ubuntu 和 Fedora》。

Fedora 25 Workstation Live

  • Intel & AMD/ 兼容 PC 32,适用于 32-bit 位 PC 点此下载
  • Intel & AMD/ 兼容 PC 64,适用于 64-bit 位 PC 点此下载

Fedora 25 Server

  • Intel & AMD/ 兼容 PC 32 位,适用于 32-bit 位 PC 点此下载
  • Intel & AMD/ 兼容 PC 64 位,适用于 64-bit 位 PC 点此下载

Linux Mint

基于 Ubuntu 的一个衍生版,以高效易用著称。

Cinnamon 桌面

  • Intel & AMD/ 兼容 PC 32 位 1.4GB ISO 镜像,适用于 32-bit 位 PC 点此下载
    (MD5: 6e7f7e03500747c6c3bfece2c9c8394f)
  • Intel & AMD/ 兼容 PC 64 位 1.5GB ISO 镜像,适用于 64-bit 位 PC 点此下载
    (MD5: e71a2aad8b58605e906dbea444dc4983)

MATE 桌面

  • Intel & AMD/ 兼容 PC 32 位 1.4GB ISO 镜像,适用于 32-bit 位 PC 点此下载
    (MD5: ad46900208e69a952b3c4e1bc7f941e5)
  • Intel & AMD/ 兼容 PC 64 位 1.6GB ISO 镜像,适用于 64-bit 位 PC 点此下载
    (MD5: d3c0ef9d0c0c93ab7109fa2ef1db0c28)

Deepin

国内发展最好的 Linux 发行版,主要关注在桌面使用方面,在外观、易用性、本土化应用方面值得称道。

  • Intel & AMD/ 兼容 PC 32 位 4.4GB ISO 镜像,适用于 32-bit 位 PC 点此下载
    (MD5: e9b6145ba9c0d21632936361dbe74a18)
  • Intel & AMD/ 兼容 PC 64 位 4.3GB ISO 镜像,适用于 64-bit 位 PC 点此下载
    (MD5: 036dda2007b0bf325b97ab3e0fe4a85a)

openSUSE

Novell 所开发的 Linux 桌面发行版,继承于 Slackware,有很大技术创新,如 YaST。其企业版 SLES 和 RHEL/CentOS 、Ubuntu 共同占据了 Linux 服务器市场的较大份额。

DVD ISO

  • Intel & AMD/ 兼容 PC 32 位 4.7GB ISO 镜像,适用于 32-bit 位 PC 点此下载
    (MD5: 43869f9b9b944adc1b210649d3730980)
  • Intel & AMD/ 兼容 PC 64 位 4.7GB ISO 镜像,适用于 64-bit 位 PC 点此下载
    (MD5: 350b8cb014a4e342cc9a7cc9df891b99)

CentOS 7

RedHat 的 Linux 企业版 RHEL 的社区重新打包版本,与 RHEL 相比,只是缺少 RedHat 的商业支持而已。主要用于服务器方面。CentOS 7 采用了一些新的技术,因此和 CentOS 6 有较大差异。

DVD ISO

  • Intel & AMD/ 兼容 PC 64 位 4GB ISO 镜像,适用于 64-bit 位 PC ,点此下载(SHA256: c455ee948e872ad2194bdddd39045b83634e8613249182b88f549bb2319d97eb)

Everything ISO

  • Intel & AMD/ 兼容 PC 64 位 8GB ISO 镜像,适用于 64-bit 位 PC ,点此下载
    (SHA256: af4969ebbdc479d330de97c5bfbb37eedc64c369f009cb15a97f9553ba441c88)

CentOS 6

由于 CentOS 7 采用了一系列 systemd 相关的技术,因此还有相当多的产品环境的 Linux 服务器依旧使用 CentOS 6。

  • Intel & AMD/ 兼容 PC 64 位 ISO 镜像,适用于 64-bit 位 PC ,DVD 1DVD 2
    (SHA256:1dda55622614a8b43b448a72f87d6cb7f79de1eff49ee8c5881a7d9db28d4e35 ,0aba869427b4ce04e100d72744daf7fea1f7be2e4be56b658095bd9e99e04e6d)
  • Intel & AMD/ 兼容 PC 32 位 ISO 镜像,适用于 32-bit 位 PC ,DVD 1DVD 2
    (MD5:720d185fdf063383a4471657076b72fc162d3c3c3bca2e5e5ae13a25b3046519 ,0c1a498a469214f276b4390a9ac2111fe8eb89084f7921d2eced659ada09e1a9)

LFS

Linux From Scratch,简称 LFS,不同于其它的 Linux 发行版,它是一种给使用者指导建议,由使用者自行从头开始自己构建的发行版。

Systemd 版本(简体中文翻译版本):

LCTT 对 LFS 7.7 systemd 版本进行了翻译,并且 LFS 官方网站收录了相应链接:

简介

Deepin,原名Hiweed Linux及Linux Deepin,于2014年4月改名Deepin。它是一个基于 DEB 包管理的一个独立操作系统。Deepin 在中国大陆区域常被称为“深度 Linux”。

Deepin的前身是Hiweed Linux项目,Hiweed Linux项目曾经因为一些原因短暂的暂停开发,在重启Hiweed Linux项目的时候深度社区(Deepin.org)与Hiweed Linux项目宣布合作,同时宣布Hiweed Linux更名为Linux Deepin,成为深度社区下的一个子模块,后来不断发展而从深度社区独立出来,成为今天的项目。

Deepin团队基于HTML5技术开发了的全新深度桌面环境,以及音乐播放器,视频播放器,软件中心等一系列特色软件。

官方网站: http://www.linuxdeepin.com/

下载

  • Intel & AMD/ 兼容 PC 32 位 4.4GB ISO 镜像,适用于 32-bit 位 PC 点此下载 (MD5: e9b6145ba9c0d21632936361dbe74a18)
  • Intel & AMD/ 兼容 PC 64 位 4.3GB ISO 镜像,适用于 64-bit 位 PC 点此下载 (MD5: 036dda2007b0bf325b97ab3e0fe4a85a)

发行

Deepin 新版本发布周期由原本一年两次(6 与 12 月)改为一年一次。

如果有相关开发和测试工作尚未完成,保证质量起见,则往往延迟新版本的发布日期。在每一个新版本发布之后的 2~3 个月之内,也会发布一个小版本。

当前版本

桌面

新版桌面保留了原有桌面的各种人性化功能的同时,还在桌面右键中新增了”热区设置“功能,从此用户可快速直观的修改热区。新版Dock将通知区合二为一,位置改为屏幕下方居中,新版Dock更为精致实用。

启动器

新版启动器新增了收藏界面,方便用户快速打开常用程序。同时在启动器右键增加“卸载软件 ”功能,从此用户卸载软件更为简便。

还为启动器新增中文拼音搜索,中文用户搜索软件更为方便。

控制中心

深度桌面环境2.0中的系统设置现已更名为“控制中心”。

全新的控制中心使用了更为清晰明了的分类方式,并且针对广大用户的意见进行修改。该版本开始提供强大的的主题管理、新增Grub管理器管理、增强了多屏显示功能、改善网络功能。

登录管理器

登录管理器依然基于Lightdm开发,采用了最新的HTML5技术,登录管理器默认背景以动态星空动画,新版登录管理器还支持用户在锁屏状态下管理后台播放的媒体。

深度主题2.0

设计师团队为深度桌面环境2.0设计了全新的深度主题。深度主题黑色为主色调,坚持简洁和拟物为风格,让深度桌面环境2.0更为眩目多彩!

深度安装器

安装器中文该版本开始,Deepin系统默认搭载Deepin团队开发的深度安装器,用户只需要简单的设置用户信息和选择安装位置,即可快速完成Deepin 2014的安装。并且深度安装器支持传统BIOS和UEFI。

注意:Deepin 2014 已经去除DeepinWin(Wubi)安装模式。

历史

Deepin Desktop Environment 2.0È

版本发布日期备注
9.122009年12月30日更名为 Linux Deepin 后首次发布
10.062010年6月
10.122010年12月31日
11.062011年7月4日引入深度软件中心
11.122011年12月30日正式改用 Gnome-Shell 作为默认界面
11.12.12012年2月29日修正11.12的错误,新增加3D切换插件等功能
12.062012年7月17日引入深度音乐与深度影音
12.122013年6月19日由于引入新桌面工作量大,原订于2012年发布却历经多次延期
12.12.12013年8月7日修正恼人的网络问题及速度提升
20132013年11月28日12.12系列版本,正式更改发布周期为一年一版,同时携带了深度游戏中心
20142014年7月6日Deepin Desktop Environment 2.0
2014.12014年08月28日
2014.22014年12月31日
2014.32015年4月28日

截图

注:部分内容来自维基百科

初识 ZMap

ZMap被设计用来针对整个IPv4地址空间或其中的大部分实施综合扫描的工具。ZMap是研究者手中的利器,但在运行ZMap时,请注意,您很有可能正在以每秒140万个包的速度扫描整个IPv4地址空间 。我们建议用户即使在实施小范围扫描之前,也联系一下本地网络的管理员并参考我们列举的最佳扫描体验

默认情况下,ZMap会对于指定端口实施尽可能大速率的TCP SYN扫描。较为保守的情况下,对10,000个随机的地址的80端口以10Mbps的速度扫描,如下所示:

$ zmap --bandwidth=10M --target-port=80 --max-targets=10000 --output-file=results.csv 

或者更加简洁地写成:

$ zmap -B 10M -p 80 -n 10000 -o results.csv

ZMap也可用于扫描特定子网或CIDR地址块。例如,仅扫描10.0.0.0/8和192.168.0.0/16的80端口,运行指令如下:

zmap -p 80 -o results.csv 10.0.0.0/8 192.168.0.0/16

如果扫描进行的顺利,ZMap会每秒输出类似以下内容的状态更新:

0% (1h51m left); send: 28777 562 Kp/s (560 Kp/s avg); recv: 1192 248 p/s (231 p/s avg); hits: 0.04%
0% (1h51m left); send: 34320 554 Kp/s (559 Kp/s avg); recv: 1442 249 p/s (234 p/s avg); hits: 0.04%
0% (1h50m left); send: 39676 535 Kp/s (555 Kp/s avg); recv: 1663 220 p/s (232 p/s avg); hits: 0.04%
0% (1h50m left); send: 45372 570 Kp/s (557 Kp/s avg); recv: 1890 226 p/s (232 p/s avg); hits: 0.04%

这些更新信息提供了扫描的即时状态并表示成:

完成进度% (剩余时间); send: 发出包的数量 即时速率 (平均发送速率); recv: 接收包的数量 接收率 (平均接收率); hits: 命中率

如果您不知道您所在网络能支持的扫描速率,您可能要尝试不同的扫描速率和带宽限制直到扫描效果开始下降,借此找出当前网络能够支持的最快速度。

默认情况下,ZMap会输出不同IP地址的列表(例如,根据SYN ACK数据包的情况),像下面这样。其输出结果还有几种附加的格式(如,JSON和Redis),可以用作生成程序可解析的扫描统计。 同样,可以指定附加的输出字段并使用输出过滤来过滤输出的结果。

115.237.116.119
23.9.117.80
207.118.204.141
217.120.143.111
50.195.22.82

我们强烈建议您使用黑名单文件,以排除预留的/未分配的IP地址空间(如,RFC1918 规定的私有地址、组播地址),以及网络中需要排除在您扫描之外的地址。默认情况下,ZMap将采用位于 /etc/zmap/blacklist.conf的这个简单的黑名单文件中所包含的预留和未分配地址。如果您需要某些特定设置,比如每次运行ZMap时的最大带宽或黑名单文件,您可以在文件/etc/zmap/zmap.conf中指定或使用自定义配置文件

如果您正试图解决扫描的相关问题,有几个选项可以帮助您调试。首先,您可以通过添加--dryrun实施预扫,以此来分析包可能会发送到网络的何处。此外,还可以通过设置'--verbosity=n`来更改日志详细程度

最佳扫描体验

我们为针对互联网进行扫描的研究者提供了一些建议,以此来引导养成良好的互联网合作氛围。

  • 密切协同本地的网络管理员,以减少风险和调查
  • 确认扫描不会使本地网络或上游供应商瘫痪
  • 在发起扫描的源地址的网页和DNS条目中申明你的扫描是善意的
  • 明确解释你的扫描中所有连接的目的和范围
  • 提供一个简单的退出扫描的方法并及时响应请求
  • 实施扫描时,不使用比研究对象需求更大的扫描范围或更快的扫描频率
  • 如果可以,将扫描流量分布到不同的时间或源地址上

即使不声明,使用扫描的研究者也应该避免利用漏洞或访问受保护的资源,并遵守其辖区内任何特殊的法律规定。

命令行参数

通用选项

这些选项是实施简单扫描时最常用的选项。我们注意到某些选项取决于所使用的探测模块输出模块(如,在实施ICMP Echo扫描时是不需要使用目的端口的)。

-p, --target-port=port

要扫描的目标TCP端口号(例如,443)

-o, --output-file=name

将结果写入该文件,使用-代表输出到标准输出。

-b, --blacklist-file=path

文件中被排除的子网使用CIDR表示法(如192.168.0.0/16),一个一行。建议您使用此方法排除RFC 1918地址、组播地址、IANA预留空间等IANA专用地址。在conf/blacklist.example中提供了一个以此为目的示例黑名单文件。

扫描选项

-n, --max-targets=n

限制探测目标的数量。后面跟的可以是一个数字(例如'-n 1000),或可扫描地址空间的百分比(例如,-n 0.1%`,不包括黑名单)

-N, --max-results=n

收到多少结果后退出

-t, --max-runtime=secs

限制发送报文的时间

-r, --rate=pps

设置发包速率,以包/秒为单位

-B, --bandwidth=bps

以比特/秒设置传输速率(支持使用后缀G,M或K(如-B 10M就是速度10 mbps)的。设置会覆盖--rate

-c, --cooldown-time=secs

发送完成后等待多久继续接收回包(默认值= 8)

-e, --seed=n

地址排序种子。如果要用多个ZMap以相同的顺序扫描地址,那么就可以使用这个参数。

--shards=n

将扫描分片/区,使其可多个ZMap中执行(默认值= 1)。启用分片时,--seed参数是必需的。

--shard=n

选择扫描的分片(默认值= 0)。n的范围在[0,N),其中N为碎片的总数。启用分片时,--seed参数是必需的。

-T, --sender-threads=n

用于发送数据包的线程数(默认值= 1)

-P, --probes=n

发送到每个IP的探测数(默认值= 1)

-d, --dryrun

用标准输出打印出每个包,而不是将其发送(用于调试)

网络选项

-s, --source-port=port|range

发送数据包的源端口

-S, --source-ip=ip|range

发送数据包的源地址。可以仅仅是一个IP,也可以是一个范围(如,10.0.0.1-10.0.0.9)

-G, --gateway-mac=addr

数据包发送到的网关MAC地址(用以防止自动检测不工作的情况)

-i, --interface=name

使用的网络接口

探测选项

ZMap允许用户指定并添加自己所需要的探测模块。 探测模块的职责就是生成要发送的探测包,并处理主机回复的响应包。

--list-probe-modules

列出可用探测模块(如tcp\_synscan)

-M, --probe-module=name

选择探测模块(默认值= tcp\_synscan)

--probe-args=args

向模块传递参数

--list-output-fields

列出可用的输出模块

输出选项

ZMap允许用户指定和编写他们自己的输出模块。输出模块负责处理由探测模块返回的字段,并将它们输出给用户。用户可以指定输出的字段,并过滤相应字段。

--list-output-modules

列出可用输出模块(如tcp\_synscan)

-O, --output-module=name

选择输出模块(默认值为csv)

--output-args=args

传递给输出模块的参数

-f, --output-fields=fields

输出的字段列表,以逗号分割

--output-filter

指定输出过滤器探测模块定义字段进行过滤

附加选项

-C, --config=filename

加载配置文件,可以指定其他路径。

-q, --quiet

不必每秒刷新输出

-g, --summary

在扫描结束后打印配置和结果汇总信息

-v, --verbosity=n

日志详细程度(0-5,默认值= 3)

-h, --help

打印帮助并退出

-V, --version

打印版本并退出

附加信息

TCP SYN 扫描

在执行TCP SYN扫描时,ZMap需要指定一个目标端口,也支持指定发起扫描的源端口范围。

-p, --target-port=port

扫描的TCP端口(例如 443)

-s, --source-port=port|range

发送扫描数据包的源端口(例如 40000-50000)

警示! ZMap基于Linux内核使用RST包来应答SYN/ACK包响应,以关闭扫描器打开的连接。ZMap是在Ethernet层完成包的发送的,这样做是为了减少跟踪打开的TCP连接和路由寻路带来的内核开销。因此,如果您有跟踪连接建立的防火墙规则,如类似于-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT的netfilter规则,将阻止SYN/ACK包到达内核。这不会妨碍到ZMap记录应答,但它会阻止RST包被送回,最终被扫描主机的连接会一直打开,直到超时后断开。我们强烈建议您在执行ZMap时,选择一组主机上未使用且防火墙允许访问的端口,加在-s后(如 -s '50000-60000' )。

ICMP Echo 请求扫描

虽然在默认情况下ZMap执行的是TCP SYN扫描,但它也支持使用ICMP echo请求扫描。在这种扫描方式下ICMP echo请求包被发送到每个主机,并以收到ICMP应答包作为答复。实施ICMP扫描可以通过选择icmp\_echoscan扫描模块来执行,如下:

$ zmap --probe-module=icmp_echoscan

UDP 数据报扫描

ZMap还额外支持UDP探测,它会发出任意UDP数据报给每个主机,并接收UDP或ICMP不可达的应答。ZMap可以通过使用--probe-args命令行选项来设置四种不同的UDP载荷。这些是:可在命令行设置可打印的ASCII 码的‘text’载荷和十六进制载荷的‘hex’,外部文件中包含载荷的‘file’,和通过动态字段生成的载荷的‘template’。为了得到UDP响应,请使用-f参数确保您指定的“data”字段处于输出范围。

下面的例子将发送两个字节'ST',即PCAnwywhere的'status'请求,到UDP端口5632。

$ zmap -M udp -p 5632 --probe-args=text:ST -N 100 -f saddr,data -o -

下面的例子将发送字节“0X02”,即SQL Server的'client broadcast'请求,到UDP端口1434。

$ zmap -M udp -p 1434 --probe-args=hex:02 -N 100 -f saddr,data -o -

下面的例子将发送一个NetBIOS状态请求到UDP端口137。使用一个ZMap自带的载荷文件。

$ zmap -M udp -p 1434 --probe-args=file:netbios_137.pkt -N 100 -f saddr,data -o -

下面的例子将发送SIP的'OPTIONS'请求到UDP端口5060。使用附ZMap自带的模板文件。

$ zmap -M udp -p 1434 --probe-args=file:sip_options.tpl -N 100 -f saddr,data -o -

UDP载荷模板仍处于实验阶段。当您在更多的使用一个以上的发送线程(-T)时可能会遇到崩溃和一个明显的相比静态载荷性能降低的表现。模板仅仅是一个由一个或多个使用${}将字段说明封装成序列构成的载荷文件。某些协议,特别是SIP,需要载荷来反射包中的源和目的包。其他协议,如portmapper和DNS,每个请求包含的字段应该是随机的,或降低被Zamp扫描的多宿主系统的风险。

以下的载荷模板将发送SIP OPTIONS请求到每一个目的地:

OPTIONS sip:${RAND_ALPHA=8}@${DADDR} SIP/2.0
Via: SIP/2.0/UDP ${SADDR}:${SPORT};branch=${RAND_ALPHA=6}.${RAND_DIGIT=10};rport;alias
From: sip:${RAND_ALPHA=8}@${SADDR}:${SPORT};tag=${RAND_DIGIT=8}
To: sip:${RAND_ALPHA=8}@${DADDR}
Call-ID: ${RAND_DIGIT=10}@${SADDR}
CSeq: 1 OPTIONS
Contact: sip:${RAND_ALPHA=8}@${SADDR}:${SPORT}
Content-Length: 0
Max-Forwards: 20
User-Agent: ${RAND_ALPHA=8}
Accept: text/plain

就像在上面的例子中展示的那样,注意每行行末以
结尾,请求以

结尾,大多数SIP实现都可以正确处理它。一个可以工作的例子放在ZMap的examples/udp-payloads目录下 (sip\_options.tpl).

当前实现了下面的模板字段:

  • SADDR: 源IP地址的点分十进制格式
  • SADDR\_N: 源IP地址的网络字节序格式
  • DADDR: 目的IP地址的点分十进制格式
  • DADDR\_N: 目的IP地址的网络字节序格式
  • SPORT: 源端口的ascii格式
  • SPORT\_N: 源端口的网络字节序格式
  • DPORT: 目的端口的ascii格式
  • DPORT\_N: 目的端口的网络字节序格式
  • RAND\_BYTE: 随机字节(0-255),长度由=(length) 参数决定
  • RAND\_DIGIT: 随机数字0-9,长度由=(length) 参数决定
  • RAND\_ALPHA: 随机大写字母A-Z,长度由=(length) 参数决定
  • RAND\_ALPHANUM: 随机大写字母A-Z和随机数字0-9,长度由=(length) 参数决定

配置文件

ZMap支持使用配置文件来代替在命令行上指定所有要求的选项。配置中可以通过每行指定一个长名称的选项和对应的值来创建:

interface "eth1"
source-ip 1.1.1.4-1.1.1.8
gateway-mac b4:23:f9:28:fa:2d # upstream gateway
cooldown-time 300 # seconds
blacklist-file /etc/zmap/blacklist.conf
output-file ~/zmap-output
quiet
summary

然后ZMap就可以按照配置文件并指定一些必要的附加参数运行了:

$ zmap --config=~/.zmap.conf --target-port=443

详细

ZMap可以在屏幕上生成多种类型的输出。默认情况下,Zmap将每隔1秒打印出相似的基本进度信息。可以通过设置--quiet来禁用。

0:01 12%; send: 10000 done (15.1 Kp/s avg); recv: 144 143 p/s (141 p/s avg); hits: 1.44%

ZMap同样也可以根据扫描配置打印如下消息,可以通过'--verbosity`参数加以控制。

Aug 11 16:16:12.813 [INFO] zmap: started
Aug 11 16:16:12.817 [DEBUG] zmap: no interface provided. will use eth0
Aug 11 16:17:03.971 [DEBUG] cyclic: primitive root: 3489180582
Aug 11 16:17:03.971 [DEBUG] cyclic: starting point: 46588
Aug 11 16:17:03.975 [DEBUG] blacklist: 3717595507 addresses allowed to be scanned
Aug 11 16:17:03.975 [DEBUG] send: will send from 1 address on 28233 source ports
Aug 11 16:17:03.975 [DEBUG] send: using bandwidth 10000000 bits/s, rate set to 14880 pkt/s
Aug 11 16:17:03.985 [DEBUG] recv: thread started

ZMap还支持在扫描之后打印出一个的可grep的汇总信息,类似于下面这样,可以通过调用--summary来实现。

cnf target-port             443
cnf source-port-range-begin         32768
cnf source-port-range-end           61000
cnf source-addr-range-begin         1.1.1.4
cnf source-addr-range-end           1.1.1.8
cnf maximum-packets             4294967295
cnf maximum-runtime             0
cnf permutation-seed            0
cnf cooldown-period             300
cnf send-interface              eth1
cnf rate                    45000
env nprocessors             16
exc send-start-time             Fri Jan 18 01:47:35 2013
exc send-end-time               Sat Jan 19 00:47:07 2013
exc recv-start-time             Fri Jan 18 01:47:35 2013
exc recv-end-time               Sat Jan 19 00:52:07 2013
exc sent                    3722335150
exc blacklisted             572632145
exc first-scanned               1318129262
exc hit-rate                0.874102
exc synack-received-unique          32537000
exc synack-received-total           36689941
exc synack-cooldown-received-unique     193
exc synack-cooldown-received-total      1543
exc rst-received-unique         141901021
exc rst-received-total          166779002
adv source-port-secret          37952
adv permutation-gen             4215763218

结果输出

ZMap可以通过输出模块生成不同格式的结果。默认情况下,ZMap只支持csv的输出,但是可以通过编译支持redisjson 。可以使用输出过滤来过滤这些发送到输出模块上的结果。输出模块输出的字段由用户指定。默认情况如果没有指定输出文件,ZMap将以csv格式返回结果,而不会生成特定结果。也可以编写自己的输出模块;请参阅编写输出模块

-o, --output-file=p

输出写入文件地址

-O, --output-module=p

调用自定义输出模块

-f, --output-fields=p

以逗号分隔的输出的字段列表

--output-filter=filter

对给定的探测指定字段输出过滤

--list-output-modules

列出可用输出模块

--list-output-fields

列出给定的探测的可用输出字段

输出字段

除了IP地址之外,ZMap有很多字段。这些字段可以通过在给定探测模块上运行--list-output-fields来查看。

$ zmap --probe-module="tcp_synscan" --list-output-fields
saddr           string: 应答包中的源IP地址
saddr-raw          int: 网络字节格式的源IP地址
daddr           string: 应答包中的目的IP地址
daddr-raw          int: 网络字节格式的目的IP地址
ipid               int: 应答包中的IP识别号
ttl                int: 应答包中的ttl(存活时间)值
sport              int: TCP 源端口
dport              int: TCP 目的端口
seqnum             int: TCP 序列号
acknum             int: TCP Ack号
window             int: TCP 窗口
classification  string: 包类型
success            int: 是应答包成功
repeat             int: 是否是来自主机的重复响应
cooldown           int: 是否是在冷却时间内收到的响应
timestamp-str   string: 响应抵达时的时间戳使用ISO8601格式
timestamp-ts       int: 响应抵达时的时间戳使用UNIX纪元开始的秒数
timestamp-us       int: 时间戳的微秒部分(例如 从'timestamp-ts'的几微秒)

可以通过使用--output-fields=fields-f来选择选择输出字段,任意组合的输出字段可以被指定为逗号分隔的列表。例如:

$ zmap -p 80 -f "response,saddr,daddr,sport,seq,ack,in_cooldown,is_repeat,timestamp" -o output.csv

过滤输出

在传到输出模块之前,探测模块生成的结果可以先过滤。过滤是针对探测模块的输出字段的。过滤使用类似于SQL的简单过滤语法写成,通过ZMap的--output-filter选项来指定。输出过滤通常用于过滤掉重复的结果,或仅传输成功的响应到输出模块。

过滤表达式的形式为<字段名> <操作符> <值><值>的类型必须是一个字符串或一串无符号整数并且匹配<字段名>类型。对于整数比较有效的操作符是= !=, <, >, <=, >=。字符串比较的操作是=,!=。--list-output-fields可以打印那些可供探测模块选择的字段和类型,然后退出。

复合型的过滤操作,可以通过使用&&(逻辑与)和||(逻辑或)这样的运算符来组合出特殊的过滤操作。

示例

书写一则过滤仅显示成功的、不重复的应答

--output-filter="success = 1 && repeat = 0"

过滤出RST分类并且TTL大于10的包,或者SYNACK分类的包

--output-filter="(classification = rst && ttl > 10) || classification = synack"

CSV

csv模块将会生成以逗号分隔各个要求输出的字段的文件。例如,以下的指令将生成名为output.csv的CSV文件。

$ zmap -p 80 -f "response,saddr,daddr,sport,seq,ack,in_cooldown,is_repeat,timestamp" -o output.csv

#响应, 源地址, 目的地址, 源端口, 目的端口, 序列号, 应答, 是否是冷却模式, 是否重复, 时间戳
response, saddr, daddr, sport, dport, seq, ack, in_cooldown, is_repeat, timestamp
synack, 159.174.153.144, 10.0.0.9, 80, 40555, 3050964427, 3515084203, 0, 0,2013-08-15 18:55:47.681
rst, 141.209.175.1, 10.0.0.9, 80, 40136, 0, 3272553764, 0, 0,2013-08-15 18:55:47.683
rst, 72.36.213.231, 10.0.0.9, 80, 56642, 0, 2037447916, 0, 0,2013-08-15 18:55:47.691
rst, 148.8.49.150, 10.0.0.9, 80, 41672, 0, 1135824975, 0, 0,2013-08-15 18:55:47.692
rst, 50.165.166.206, 10.0.0.9, 80, 38858, 0, 535206863, 0, 0,2013-08-15 18:55:47.694
rst, 65.55.203.135, 10.0.0.9, 80, 50008, 0, 4071709905, 0, 0,2013-08-15 18:55:47.700
synack, 50.57.166.186, 10.0.0.9, 80, 60650, 2813653162, 993314545, 0, 0,2013-08-15 18:55:47.704
synack, 152.75.208.114, 10.0.0.9, 80, 52498, 460383682, 4040786862, 0, 0,2013-08-15 18:55:47.707
synack, 23.72.138.74, 10.0.0.9, 80, 33480, 810393698, 486476355, 0, 0,2013-08-15 18:55:47.710

Redis

Redis的输出模块允许地址被添加到一个Redis的队列,而不是保存到文件,允许ZMap将它与之后的处理工具结合使用。

注意! ZMap默认不会编译Redis功能。如果你从源码构建ZMap,可以在CMake的时候加上-DWITH_REDIS=ON来增加Redis支持。

JSON

JSON输出模块用起来类似于CSV模块,只是以JSON格式写入到文件。JSON文件能轻松地导入到其它可以读取JSON的程序中。

注意!,ZMap默认不会编译JSON功能。如果你从源码构建ZMap,可以在CMake的时候加上-DWITH_JSON=ON来增加JSON支持。

黑名单和白名单

ZMap同时支持对网络前缀做黑名单和白名单。如果ZMap不加黑名单和白名单参数,他将会扫描所有的IPv4地址(包括本地的,保留的以及组播地址)。如果指定了黑名单文件,那么在黑名单中的网络前缀将不再扫描;如果指定了白名单文件,只有那些网络前缀在白名单内的才会扫描。白名单和黑名单文件可以协同使用;黑名单优先于白名单(例如:如果您在白名单中指定了10.0.0.0/8并在黑名单中指定了10.1.0.0/16,那么10.1.0.0/16将不会扫描)。白名单和黑名单文件可以在命令行中指定,如下所示:

-b, --blacklist-file=path

文件用于记录黑名单子网,以CIDR(无类域间路由)的表示法,例如192.168.0.0/16

-w, --whitelist-file=path

文件用于记录限制扫描的子网,以CIDR的表示法,例如192.168.0.0/16

黑名单文件的每行都需要以CIDR的表示格式书写,一行单一的网络前缀。允许使用#加以备注。例如:

# IANA(英特网编号管理局)记录的用于特殊目的的IPv4地址
# http://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml
# 更新于2013-05-22

0.0.0.0/8           # RFC1122: 网络中的所有主机
10.0.0.0/8          # RFC1918: 私有地址
100.64.0.0/10       # RFC6598: 共享地址空间
127.0.0.0/8         # RFC1122: 回环地址
169.254.0.0/16      # RFC3927: 本地链路地址
172.16.0.0/12       # RFC1918: 私有地址
192.0.0.0/24        # RFC6890: IETF协议预留
192.0.2.0/24        # RFC5737: 测试地址1
192.88.99.0/24      # RFC3068: IPv6转换到IPv4的任播
192.168.0.0/16      # RFC1918: 私有地址
192.18.0.0/15       # RFC2544: 检测地址
198.51.100.0/24     # RFC5737: 测试地址2
203.0.113.0/24      # RFC5737: 测试地址3
240.0.0.0/4         # RFC1112: 预留地址
255.255.255.255/32  # RFC0919: 限制广播地址

# IANA记录的用于组播的地址空间
# http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml
# 更新于2013-06-25

224.0.0.0/4         # RFC5771: 组播/预留地址ed

如果您只是想扫描因特网中随机的一部分地址,使用抽样检出,来代替使用白名单和黑名单。

注意!ZMap默认设置使用/etc/zmap/blacklist.conf作为黑名单文件,其中包含有本地的地址空间和预留的IP空间。通过编辑/etc/zmap/zmap.conf可以改变默认的配置。

速度限制与抽样

默认情况下,ZMap将以您当前网卡所能支持的最快速度扫描。以我们对于常用硬件的经验,这通常是理论上Gbit以太网速度的95-98%,这可能比您的上游提供商可处理的速度还要快。ZMap是不会自动的根据您的上游提供商来调整发送速率的。您可能需要手动的调整发送速率来减少丢包和错误结果。

-r, --rate=pps

设置最大发送速率以包/秒为单位

-B, --bandwidth=bps

设置发送速率以比特/秒(支持G,M和K后缀)。这会覆盖--rate参数。

ZMap同样支持对IPv4地址空间进行指定最大目标数和/或最长运行时间的随机采样。由于每次对主机的扫描是通过随机排序生成的,限制扫描的主机个数为N就会随机抽选N个主机。命令选项如下:

-n, --max-targets=n

探测目标上限数量

-N, --max-results=n

结果上限数量(累积收到这么多结果后退出)

-t, --max-runtime=s

发送数据包时间长度上限(以秒为单位)

-s, --seed=n

种子用以选择地址的排列方式。使用不同ZMap执行扫描操作时将种子设成相同的值可以保证相同的扫描顺序。

举个例子,如果您想要多次扫描同样的一百万个互联网主机,您可以设定排序种子和扫描主机的上限数量,大致如下所示:

zmap -p 443 -s 3 -n 1000000 -o results

为了确定哪一百万主机将要被扫描,您可以执行预扫,只打印数据包而非发送,并非真的实施扫描。

zmap -p 443 -s 3 -n 1000000 --dryrun | grep daddr
    | awk -F'daddr: ' '{print $2}' | sed 's/ |.*//;' 

发送多个数据包

ZMap支持向每个主机发送多个探测。增加这个数量既增加了扫描时间又增加了到达的主机数量。然而,我们发现,增加的扫描时间(每个额外扫描的增加近100%)远远大于到达的主机数量(每个额外扫描的增加近1%)。

-P, --probes=n

向每个IP发出的独立探测个数(默认值=1)

示例应用

ZMap专为向大量主机发起连接并寻找那些正确响应而设计。然而,我们意识到许多用户需要执行一些后续处理,如执行应用程序级别的握手。例如,用户在80端口实施TCP SYN扫描也许想要实施一个简单的GET请求,还有用户扫描443端口可能希望完成TLS握手。

Banner获取

我们收录了一个示例程序,banner-grab,伴随ZMap使用可以让用户从监听状态的TCP服务器上接收到消息。Banner-grab连接到提供的服务器上,发送一个可选的消息,然后打印出收到的第一个消息。这个工具可以用来获取banner,例如HTTP服务的回复的具体指令,telnet登陆提示,或SSH服务的字符串。

下面的例子寻找了1000个监听80端口的服务器,并向每个发送一个简单的GET请求,存储他们的64位编码响应至http-banners.out

$ zmap -p 80 -N 1000 -B 10M -o - | ./banner-grab-tcp -p 80 -c 500 -d ./http-req > out

如果想知道更多使用banner-grab的细节,可以参考examples/banner-grab中的README文件。

注意! ZMap和banner-grab(如例子中)同时运行可能会比较显著的影响对方的表现和精度。确保不让ZMap占满banner-grab-tcp的并发连接,不然banner-grab将会落后于标准输入的读入,导致阻塞ZMap的输出写入。我们推荐使用较慢扫描速率的ZMap,同时提升banner-grab-tcp的并发性至3000以内(注意 并发连接>1000需要您使用ulimit -SHn 100000ulimit -HHn 100000来增加每个进程的最大文件描述符数量)。当然,这些参数取决于您服务器的性能、连接成功率(hit-rate);我们鼓励开发者在运行大型扫描之前先进行小样本的试验。

建立套接字

我们也收录了另一种形式的banner-grab,就是forge-socket, 重复利用服务器发出的SYN-ACK,连接并最终取得banner。在banner-grab-tcp中,ZMap向每个服务器发送一个SYN,并监听服务器发回的带有SYN+ACK的应答。运行ZMap主机的内核接受应答后发送RST,这样就没有与该包关联活动连接。程序banner-grab必须在这之后创建一个新的TCP连接到从服务器获取数据。

在forge-socket中,我们利用内核中同名的模块,使我们可以创建任意参数的TCP连接。可以通过抑制内核的RST包,并重用SYN+ACK的参数取代该包而创建套接字,通过这个套接字收发数据和我们平时使用的连接套接字并没有什么不同。

要使用forge-socket,您需要forge-socket内核模块,从github上可以获得。您需要git clone [email protected]:ewust/forge_socket.git至ZMap源码根目录,然后cd进入forge\_socket目录,运行make。以root身份运行insmod forge_socket.ko 来安装该内核模块。

您也需要告知内核不要发送RST包。一个简单的在全系统禁用RST包的方法是使用iptables。以root身份运行iptables -A OUTPUT -p tcp -m tcp --tcp-flgas RST,RST RST,RST -j DROP即可,当然您也可以加上一项--dport X将禁用局限于所扫描的端口(X)上。扫描完成后移除这项设置,以root身份运行iptables -D OUTPUT -p tcp -m tcp --tcp-flags RST,RST RST,RST -j DROP即可。

现在应该可以建立forge-socket的ZMap示例程序了。运行需要使用extended\_fileZMap输出模块

$ zmap -p 80 -N 1000 -B 10M -O extended_file -o - | \
    ./forge-socket -c 500 -d ./http-req > ./http-banners.out

详细内容可以参考examples/forge-socket目录下的README。


编写探测和输出模块

ZMap可以通过探测模块来扩展支持不同类型的扫描,通过输出模块增加不同类型的输出结果。注册过的探测和输出模块可以在命令行中列出:

--list-probe-modules

列出安装过的探测模块

--list-output-modules

列出安装过的输出模块

输出模块

ZMap的输出和输出后处理可以通过实现和注册扫描器的输出模块来扩展。输出模块在接收每一个应答包时都会收到一个回调。然而默认提供的模块仅提供简单的输出,这些模块同样支持更多的输出后处理(例如:重复跟踪或输出AS号码来代替IP地址)。

通过定义一个新的output\_module结构来创建输出模块,并在output\_modules.c中注册:

typedef struct output_module {
    const char          *name;           // 在命令行如何引用输出模块
    unsigned            update_interval; // 以秒为单位的更新间隔

    output_init_cb      init;            // 在扫描器初始化的时候调用
    output_update_cb    start;           // 在扫描器开始的时候调用
    output_update_cb    update;          // 每次更新间隔调用,秒为单位
    output_update_cb    close;           // 扫描终止后调用

    output_packet_cb    process_ip;      // 接收到应答时调用

    const char          *helptext;       // 会在--list-output-modules时打印在屏幕上

} output_module_t;

输出模块必须有名称,通过名称可以在命令行调用,并且通常会实现success_ip和常见的other_ip回调。process\_ip的回调由每个收到并经由probe module过滤的应答包调用。应答是否被认定为成功并不确定(比如,它可以是一个TCP的RST)。这些回调必须定义匹配output_packet_cb定义的函数:

int (*output_packet_cb) (

    ipaddr_n_t    saddr,         // 网络字节格式的发起扫描主机IP地址
    ipaddr_n_t    daddr,         // 网络字节格式的目的IP地址

    const char*   response_type, // 发送模块的数据包分类

    int           is_repeat,     // {0: 主机的第一个应答, 1: 后续的应答}
    int           in_cooldown,   // {0: 非冷却状态, 1: 扫描器处于冷却中}

    const u_char* packet,        // 指向IP包的iphdr结构体的指针
    size_t        packet_len     // 包的长度,以字节为单位
);

输出模块还可以通过注册回调,执行在扫描初始化的时候(诸如打开输出文件的任务)、在扫描开始阶段(诸如记录黑名单的任务)、在扫描的常规间隔(诸如状态更新的任务)、在关闭的时候(诸如关掉所有打开的文件描述符)。提供的这些回调可以完整的访问扫描配置和当前状态:

int (*output_update_cb)(struct state_conf*, struct state_send*, struct state_recv*);

这些定义在output\_modules.h中。在src/outputmodules/modulecsv.c中有可用示例。

探测模块

数据包由探测模块构造,它可以创建各种包和不同类型的响应。ZMap默认拥有两个扫描模块:tcp_synscanicmp_echoscan。默认情况下,ZMap使用tcp_synscan来发送TCP SYN包并对每个主机的响应分类,如打开时(收到SYN+ACK)或关闭时(收到RST)。ZMap允许开发者编写自己的ZMap探测模块,使用如下的API:

任何类型的扫描都必须通过开发和注册send_module_t结构中的回调来实现:

typedef struct probe_module {
    const char               *name;             // 如何在命令行调用扫描
    size_t                   packet_length;     // 探测包有多长(必须是静态的)

    const char               *pcap_filter;      // 对收到的响应实施PCAP过滤
    size_t                   pcap_snaplen;      // libpcap 捕获的最大字节数 
    uint8_t                  port_args;         // 设为1,如果ZMap需要用户指定--target-port

    probe_global_init_cb     global_initialize; // 在扫描初始化会时被调用一次
    probe_thread_init_cb     thread_initialize; // 每个包缓存区的线程中被调用一次
    probe_make_packet_cb     make_packet;       // 每个主机更新包的时候被调用一次
    probe_validate_packet_cb validate_packet;   // 每收到一个包被调用一次,
                                                // 如果包无效返回0,
                                                // 非零则有效。

    probe_print_packet_cb    print_packet;      // 如果在预扫模式下被每个包都调用
    probe_classify_packet_cb process_packet;    // 由区分响应的接收器调用
    probe_close_cb           close;             // 扫描终止后被调用

    fielddef_t               *fields            // 该模块指定的字段的定义
    int                      numfields          // 字段的数量

} probe_module_t;

在扫描操作初始化时会调用一次global_initialize,可以用来实施一些必要的全局配置和初始化操作。然而,global_initialize并不能访问包缓冲区,那里是线程特定的。代替的,thread_initialize在每个发送线程初始化的时候被调用,提供对于缓冲区的访问,可以用来构建探测包和全局的源和目的值。此回调应用于构建主机不可知的包结构,甚至只有特定值(如:目的主机和校验和),需要随着每个主机更新。例如,以太网头部信息在交换时不会变更(减去校验和是由NIC硬件计算的)因此可以事先定义以减少扫描时间开销。

调用回调参数make\_packet是为了让被扫描的主机允许探测模块更新主机指定的值,同时提供IP地址、一个非透明的验证字符串和探测数目(如下所示)。探测模块负责在探测中放置尽可能多的验证字符串,即便当服务器返回的应答为空时,探测模块也能验证它的当前状态。例如,针对TCP SYN扫描,tcp\_synscan探测模块会使用TCP源端口和序列号的格式存储验证字符串。响应包(SYN+ACK)将包含目的端口和确认号的预期值。

int make_packet(
    void        *packetbuf,  // 包的缓冲区
    ipaddr_n_t  src_ip,      // 网络字节格式源IP
    ipaddr_n_t  dst_ip,      // 网络字节格式目的IP
    uint32_t    *validation, // 探测中的有效字符串
    int         probe_num    // 如果向每个主机发送多重探测,
                             // 该值为我们对于该主机
                             // 正在发送的探测数目
);

扫描模块也应该定义pcap_filtervalidate_packetprocess_packet。只有符合PCAP过滤器的包才会被扫描。举个例子,在一个TCP SYN扫描的情况下,我们只想要调查TCP SYN / ACK或RST TCP数据包,并利用类似tcp && tcp[13] & 4 != 0 || tcp[13] == 18的过滤方法。validate_packet函数将会被每个满足PCAP过滤条件的包调用。如果验证返回的值非零,将会调用process_packet函数,并使用fields定义的字段和包中的数据填充字段集。举个例子,如下代码为TCP synscan探测模块处理了一个数据包。

void synscan_process_packet(const u_char *packet, uint32_t len, fieldset_t *fs)
{
    struct iphdr *ip_hdr = (struct iphdr *)&packet[sizeof(struct ethhdr)];
    struct tcphdr *tcp = (struct tcphdr*)((char *)ip_hdr 
            + (sizeof(struct iphdr)));

    fs_add_uint64(fs, "sport", (uint64_t) ntohs(tcp->source)); 
    fs_add_uint64(fs, "dport", (uint64_t) ntohs(tcp->dest));
    fs_add_uint64(fs, "seqnum", (uint64_t) ntohl(tcp->seq));
    fs_add_uint64(fs, "acknum", (uint64_t) ntohl(tcp->ack_seq));
    fs_add_uint64(fs, "window", (uint64_t) ntohs(tcp->window));

    if (tcp->rst) { // RST packet
        fs_add_string(fs, "classification", (char*) "rst", 0);
        fs_add_uint64(fs, "success", 0);
    } else { // SYNACK packet
        fs_add_string(fs, "classification", (char*) "synack", 0);
        fs_add_uint64(fs, "success", 1);
    }
}

via: https://zmap.io/documentation.html

译者:martin2011qi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出