原创文章,转载时请保留此声明,并给出原文连接。
如果您是计算机相关从业人员,那么应该经历不止一次网络安全专项检查了,你肯定是收到过信息系统技术检测报告,要求你加强风险监测,确保你提供的系统服务坚实可靠了。
没检测到问题还好,检测到问题的话,有些处理起来还是挺麻烦的,尤其是线上正在运行的系统。所以,如果能在正式上线部署前,自检一番,把能处理的问题处理掉,可能会省掉一些麻烦。
怎么自检呢?方案很多,这里介绍其中的一种,就是 nmap。你可能听说过,没有的话,先记住它是一种网络映射工具,被系统管理员、网络工程师甚至黑客广泛用于主机发现、端口规则、系统检测、漏洞扫描等。
本文就是和您一起看几个 nmap 命令的实际用例。
? 本文中的大多数示例,都将使用
nmap本身提供的目标:scanme.nmap.org。
多数 Linux 发行版上,可能预装了。不确定的话,可以输入如下命令检测一下:
nmap -v
类似如下输出,说明是已经装好了的。
Starting Nmap 7.80 ( https://nmap.org ) ...
Read data files from: /usr/bin/../share/nmap
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.02 seconds
否则的话,可以使用操作系统对应的方式安装它。例如对于 Debian/Ubuntu,使用:
sudo apt install nmap
对于 RHEL/Fedora base:
sudo dnf install nmap
对于基于 Arch 的发行版:
sudo pacman -S nmap
对于 Windows,如果你使用 Scoop 的话,也很简单:
scoop install nmap
安装完成后,可以开始我们的实验。
命令格式如下:
nmap Target
其中 Target 是要扫描的目标 IP 或域名。如果想快速扫描,可以加上 -F 参数:
nmap -F Target
如下是示例:
nmap -F scanme.nmap.org
...
Not shown: 98 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 8.52 seconds
可以看到 22 和 80 端口是开放的。
如果想一次扫描多个主机,有几种方法:
例如,一次扫描 3 个 IP:
nmap 192.168.1.9 192.168.1.8 192.168.1.10
扫描整个网段
nmap 192.168.1.*
扫描从 192.168.1.8 到 192.168.1.10 的 IP:
nmap 192.168.1.8-10
另一种扫描从 192.168.1.8 到 192.168.1.10 的方式:
nmap 192.168.1.8,9,10
扫描某个网段,但排除其中之一:
nmap 192.168.1.* --exclude 192.168.1.6
192.168.1.6 这台主机将不会被扫描。
可以使用 nmap 命令发送 ACK 数据包,以检查目标系统是否启用了防火墙:
sudo nmap -sA scanme.nmap.org
注意 sudo,这条命令需要 root 权限。输出如下:
...
Not shown: 995 unfiltered ports
PORT STATE SERVICE
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
593/tcp filtered http-rpc-epmap
4444/tcp filtered krb524
Nmap done: 1 IP address (1 host up) scanned in 32.48 seconds
扫描端口后了解服务后,您可能希望了解有关这些服务的更多信息,可以使用标志:sV
nmap -sV scanme.nmap.org
...
Not shown: 991 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
593/tcp filtered http-rpc-epmap
4444/tcp filtered krb524
9929/tcp open nping-echo Nping echo
31337/tcp open tcpwrapped
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.71 seconds
指定端口,需要使用 -p 参数:
nmap -p 443 scanme.nmap.org
nmap -p 443,80 scanme.nmap.org
nmap -p 20-80 scanme.nmap.org
如下是真实的扫描示例:
nmap -p 443 scanme.nmap.org
...
PORT STATE SERVICE
443/tcp closed https
Nmap done: 1 IP address (1 host up) scanned in 0.54 seconds
坏人喜欢的模式,对不对?使用参数 -sS,需要 root 权限:
sudo nmap -sS Target
没有示例。
要获取操作系统信息,需要在扫描时使用参数 -A:
nmap -A scanme.nmap.org
...
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 ac:00:a0:1a:82:ff:cc:55:99:dc:67:2b:34:97:6b:75 (DSA)
| 2048 20:3d:2d:44:62:2a:b0:5a:9d:b5:b3:05:14:c2:a6:b2 (RSA)
| 256 96:02:bb:5e:57:54:1c:4e:45:2f:56:4c:4a:24:b2:57 (ECDSA)
|_ 256 33:fa:91:0f:e0:e1:7b:1f:6d:05:a2:b0:f1:54:41:56 (ED25519)
80/tcp open http Apache httpd 2.4.7 ((Ubuntu))
|_http-server-header: Apache/2.4.7 (Ubuntu)
|_http-title: Go ahead and ScanMe!
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
593/tcp filtered http-rpc-epmap
4444/tcp filtered krb524
9929/tcp open nping-echo Nping echo
31337/tcp open tcpwrapped
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 29.91 seconds
通常用 ping,但 nmap 命令也可以,比如:
nmap -sP 192.168.1.0/24
通常用 ip addr 和 ip route,但 nmap 也可以:
nmap --iflist
...
************************INTERFACES************************
DEV (SHORT) IP/MASK TYPE UP MTU MAC
eth0 (eth0) 169.254.38.224/16 other down 1500
eth0 (eth0) fe80::a185:605b:4962:26e0/64 other down 1500
lo (lo) 127.0.0.1/8 loopback up 1500
lo (lo) ::1/128 loopback up 1500
wifi0 (wifi0) fe80::35e9:f194:3704:3178/64 ethernet up 1500 64:79:F0:2A:28:E4
wifi1 (wifi1) 169.254.113.12/16 other down 1500
wifi1 (wifi1) fe80::f520:4762:ad46:710c/64 other down 1500
wifi2 (wifi2) 169.254.103.91/16 other down 1500
wifi2 (wifi2) fe80::d14:5bb0:9a34:675b/64 other down 1500
**************************ROUTES**************************
DST/MASK DEV METRIC GATEWAY
0.0.0.0/32 wifi0 0 192.168.99.1
127.0.0.1/32 lo 256
127.255.255.255/32 lo 256
255.255.255.255/32 lo 256
255.255.255.255/32 wifi0 256
127.0.0.0/8 lo 256
224.0.0.0/4 lo 256
224.0.0.0/4 wifi0 256
::1/128 lo 256
fe80::35e9:f194:3704:3178/128 wifi0 256
fe80::/64 wifi0 256
ff00::/8 lo 256
ff00::/8 wifi0 256
玩法还有很多,不一一列举了。你有空的话,自己发掘发掘吧。
原创文章,转载时请保留此声明,并给出原文连接。
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
我正在研究使用EventMachine支持的twitter-streamrubygem来跟踪和捕获推文。我对整个事件编程有点陌生。我如何判断我在事件循环中所做的任何处理是否导致我落后?有没有简单的检查方法? 最佳答案 您可以通过使用周期性计时器并打印出耗时来确定延迟。如果您使用的是1秒的计时器,您应该已经过了大约1秒,如果它更长,您就知道您正在减慢react器的速度。@last=Time.now.to_fEM.add_periodic_timer(1)doputs"LATENCY:#{Time.now.to_f-@last}"@
如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e
什么是测试格式验证的最佳方法让我们说一个用户名,使用字母数字的正则表达式,但不是纯数字?我一直在我的模型中使用以下验证validates:username,:format=>{:with=>/^[a-z0-9]+[-a-z0-9]*[a-z0-9]+$/i}数字用户名(例如“342”)通过了验证,这是我不想要的。 最佳答案 您想“向前看”一封信:/\A(?=.*[a-z])[a-z\d]+\Z/i 关于ruby-on-rails-Rails格式验证——字母数字,但不是纯数字,我们在Sta
我要下载http://foobar.com/song.mp3作为song.mp3,而不是让Chrome在其native中打开它浏览器中的播放器。我怎样才能做到这一点? 最佳答案 您只需要确保发送这些header:Content-Disposition:attachment;filename=song.mp3;Content-Type:application/octet-streamContent-Transfer-Encoding:binarysend_file方法为您完成:get'/:file'do|file|file=File.
我发现ruby加载路径是一个数组,很多项目都是这样使用的:$:.unshift(File.expand_path("../../lib",__FILE__))可以将本地文件添加到ruby路径数组的前面,方便我们require或者load。所以,我希望知道为什么我们不使用push将文件添加到数组的末尾? 最佳答案 假设您有一个“date.rb”文件(为什么不呢)并且您想要加载这个文件,而不是标准库日期。如果您使用追加,当您调用require'date'时您的文件将永远不会被加载,因为它位于数组的末尾并且标准日期会在之前找到。因此,如果
我有一个这样的哈希{55=>{:value=>61,:rating=>-147},89=>{:value=>72,:rating=>-175},78=>{:value=>64,:rating=>-155},84=>{:value=>90,:rating=>-220},95=>{:value=>39,:rating=>-92},46=>{:value=>97,:rating=>-237},52=>{:value=>73,:rating=>-177},64=>{:value=>69,:rating=>-167},86=>{:value=>68,:rating=>-165},53=>{:va
我在这里对我的部署策略有点困惑,在什么情况下部署时我想向unicorn发送reload信号?例如在我的例子中它会是这样的:sudokill-sUSR2`cat/home/deploy/apps/my_app/current/tmp/pids/unicorn.pid`我一直在通过杀死那个pid来部署我的应用程序,然后通过类似的东西再次启动unicorn:bundleexecunicorn-cconfig/unicorn/production.rb-Eproduction-D我只是想知道为什么要使用重新加载?我可以通过这样做获得部署的任何性能吗? 最佳答案
使用FileUtils方法有什么好处http://ruby-doc.org/core/classes/FileUtils.html比等效的Bash命令? 最佳答案 除此之外,您不必担心确保您的目标平台安装了您正在使用的特定工具这一事实,以及正确引用shell异常的问题(如果您的目标是特别有问题的)Windows和Unix-alikes——尽管有Cygwin、GNUWin32等),如果你使用Ruby的FileUtils,你有一个Ruby函数调用的中等大小的开销,而如果你使用外部实用程序,你有相当大的开销来启动一个外部进程的每一次“调用
在我的mac上安装几个东西时遇到这个问题,我认为这个问题来自将我的豹子升级到雪豹。我认为这个问题也与macports有关。/usr/local/lib/libz.1.dylib,filewasbuiltfori386whichisnotthearchitecturebeinglinked(x86_64)有什么想法吗?更新更具体地说,这发生在安装nokogirigem时日志看起来像:xslt_stylesheet.c:127:warning:passingargument1of‘Nokogiri_wrap_xml_document’withdifferentwidthduetoproto