怎么查看开放了哪些端口
本地查看
netstat
ss
远程查看
namp
massca
1、本地查看
如果是自己的电脑,已经登上了,那么可以通过netstat或者ss查看开放了哪些端口
在terminal输入netstat -lntup 或者ss -antu
还有其它的用法,例如
netstat -i查看网卡信息
netstat -g查看组播关系
netstat -s查看网络统计
netstat -e查看以太网的数据
netstat -r显示路由信息
ss -a显示所有的sockets
ss -l 显示正在监听
ss -n显示数字ip和端口,不通过域名服务器
ss -p显示使用socket的对应进程
ss -t 显示tcp
ss -u 显示udp
ss -4 -6显示ipv4或者ipv6
虽然ss和netstat都能查看端口,但是ss要比netstat快,netstat是遍历/proc下面每个PID目录,ss直接读/proc/net下面的统计信息。所以ss执行的时候消耗资源以及消耗的时间都比netstat少很多。
2、通过远程扫描的方式发现开放端口
nmap -sS -p20-100 ip -vv
sS是向远程主机端口发送syn包,根据回包判断端口是否开放,这种扫描有很大的误报,因为没有建立tcp三次握手,扫描会比较快
sT是全连接扫描,会与对方建立三次握手,扫描结果比较准确,但是比较慢
-p指定端口
-vv显示详细信息
masscan和nmap相比最大的优点是扫描速度非常快,号称最快的扫描器,能在五分钟扫遍整个互联网
masscan -p80,8000-8100 10.0.0.0/8 --rate=10000
以10kpps的速度扫描10.0.0.0/8的80,8000-8100
怎么从端口侵入电脑?都是用什么工具?
nmap 使用介绍nmap是目前为止最广为使用的国外端口扫描工具之一。我们可以从 进行下载,可以很容易的安装到Windows和unix操作系统中,包括mac os x(通过configure、make 、make install等命令)也可以直接从http://下载windows二进制(包括所需要的winpcap)也可以从http://获得nmap的图形windows。扫描主机$ nmap -sT 192.168.1.18 Starting nmap 3.48( )at 2007-10-10 18:13 EDT Interesting ports on gamebase(192.168.1.18) port state serverice 22/tcp open ssh 111/tcp open sunrpc .......... $ nmap -sR 192.168.1.18 Startingnmap 3.48( )at 2007-10-10 18:13 EDT Interesting ports on gamebase(192.168.1.18) port state serverice 22/tcp open ssh 111/tcp open sunrpc ..........我们可以使用ping扫描的方法(-sP),与fping的工作方式比较相似,它发送icmp回送请求到指定范围的ip地址并等待响应。现在很多主机在扫描的时候都做了处理,阻塞icmp请求,这种情况下。nmap将尝试与主机的端口80进行连接,如果可以接收到响应(可以是syn/ack,也可以是rst),那么证明主机正在运行,反之,则无法判断主机是否开机或者是否在网络上互连。扫描tcp端口这里-sR是怎样在打开的端口上利用RPC命令来判断它们是否运行了RPC服务。nmap可以在进行端口扫描的tcp报文来做一些秘密的事情。首先,要有一个SYN扫描(-sS),它只做建立TCP连接的前面一些工作,只发送一个设置SYN标志的TCP报文,一个RESET报文,那么nmap假设这个端口是关闭的,那么就不做任何事情了。如果接收到一个响应,它并不象正常的连接一样对这个报文进行确认,而是发送一个RET报文,TCP的三次握手还没有完成,许多服务将不会记录这次连接。有的时候,nmap会告诉我们端口被过滤,这意味着有防火墙或端口过滤器干扰了nmap,使其不能准确的判断端口是打开还是关闭的,有的防火墙只能过滤掉进入的连接。扫描协议如果试图访问另一端无程序使用的UDP端口,主机将发回一个icmp“端口不可达”的提示消息,IP协议也是一样。每个传输层的IP协议都有一个相关联的编号,使用最多的是ICMP(1)、TCP(6)和UDP(17)。所有的IP报文都有一个“协议”域用于指出其中的传输层报文头所使用的协议。如果我们发送一个没有传输层报文头的原始IP报文并把其协议域编号为130[该编号是指类似IPSEC协议的被称为安全报文外壳或SPS协议],就可以判断这个协议是否在主机上实现了。如果我们得到的是ICMP协议不可达的消息,意味着该协议没有被实现,否则就是已经实现了,用法为-sO.隐蔽扫描行为nmap给出了几个不同的扫描选项,其中一些可以配套着隐藏扫描行为,使得不被系统日志、防火墙和IDS检测到。提供了一些随机的和欺骗的特性。具体例子如下:FTP反弹,在设计上,FTP自身存在一个很大的漏洞,当使用FTP客户机连接到FTP服务器时,你的客户机在TCP端口21上与FTP服务器对话,这个TCP连接称为控制连接。FTP服务器现在需要另一条与客户机连接,该连接称为数据连接,在这条连接上将传送实际的文件数据,客户机将开始监听另一个TCP端口上从服务器发挥的数据连接,接下来执行一个PORT命令到服务器,告诉它建立一条数据连接到客户机的IP地址和一个新打开的端口,这种操作方法称为主动传输。许多客户机使用网络地址转换或通过防火墙与外界连接,所以主动传输FTP就不能正常工作,因为由服务器建立的客户机的连接通常不允许通过。被动传输是大多数FTP客户机和服务器所使用的方法,因为客户机既建立控制连接又建立数据连接,这样可以通过防火墙或NAT了。FTP的PORT命令,用来告诉FTP连接的服务器,使得与刚刚打开的用于数据连接的端口之间建立一个连接。由于我们不仅指定端口而且指定连接所用的IP地址,所以客户端也可以通过PORT命令让服务器连接到任何地方。所以我们一样可以让nmap用这个方法进行防火墙穿透。nmap做的所有工作是与一台服务器建立一个主动模式的FTP连接,并发送一个包含它试图扫描的主机IP地址和端口号的PORT命令。nmap -b aaa@ -p 6000 192.168.1.226
nmap 与ftp服务器的对话的例子:
server:220 target ftp server version 4 ready
client:user anonymous
server: 331 Guest login ok ,send e-mail as password
client:pass
server :230 login successful
client:PORT 192,168,1.226,23,112
server:200 PORT command successful
client:LIST
server:150 Opening ASCII connection for '/bin/ls'
server:226 Transfer completePORT命令起作用,可以制造是别人进行端口扫描,扫描任何FTP服务器所能访问的主机,绕过防火墙和端口过滤器,但还是存在一些危险的,如果对方登陆到了你的这个匿名FTP服务器上,从日志查找到相应的匿名FTP连接,从而知道你的IP地址,这样就直接暴露了。nmap -sI 空闲扫描,主要是欺骗端口扫描的源地址。nmap -f 可以把TCP头分片的IP报文进行一些隐蔽的扫描。不完整的TCP报文不被防火墙阻塞也不被IDS检测到。nmap-D
选择几台肉鸡,并使用-D标志在命令行中指定它们。namp通过诱骗的IP地址来进行欺骗式端口扫描,而系统管理员可以同时看到不同的端口扫描,而只有一个是真实的,很好的保护了自己。os指纹识别
这个是nmap最有用的功能之一,就是可以鉴别远程主机。通过简单的执行网络扫描,nmap通常可以告诉你远程主机所运行的OS,甚至详细到版本号。当你指定-Q标志时,nmap将用几种不同的技术从主机返回IP报文中寻找这些鉴别信息。通过发送特别设计的TCP和UDP头,nmap可以得到远程主机对TCP/IP协议栈的处理方法。它将分析结果与保存在文件中的已知特征信息进行比较。OS鉴别选项也可以让nmap对TCP报文进行分析以决定另外一些信息,如系统的启动时间,TCP序列号,预测的序列号使我们更容易截获报文并猜测序列号从而伪造TCP连接。nmap命令使用详细解释-P0 -PT -PS -PU -PE -PP -PM -PB 当nmap进行某种类型的端口或协议扫描时,通常都会尝试先ping 主机,这种尝试可使nmap不会浪费时间在那些未开机的主机上,但是许多主机与防火墙会阻塞ICMP报文,我们希望能通过控制使用。-P0 告诉nmap不ping 主机,只进行扫描-PT 告诉nmap使用TCP的ping-PS 发送SYN报文。-PU 发送一个udp ping-PE 强制执行直接的ICMP ping -PB 这是默认类型,可以使用ICMP ping 也可以使用TCP ping .-6 该标志允许IPv6支持-v -d 使用-v选项可得到更详细的输出,而-d选项则增加调试输出。-oN 按照人们阅读的格式记录屏幕上的输出,如果是在扫描多台机器,则该选项很有用。-oX 以xml格式向指定的文件记录信息-oG 以一种易于检索的格式记录信息,即每台主机都以单独的行来记录所有的端口和0s信息。-oA 使用为基本文件名,以普通格式(-oN)、XML格式(-oX)和易于检索的格式(-oG)jilu xinxi -oM 把输出格式化为机器可阅读的文件-oS 把输出进行傻瓜型排版--resume如果你取消了扫描,但生成了供人或者供机器阅读的文件,那么可以把该文件提供给nmap继续让它扫描。-iR-iL可以不在命令行中指定目标主机,而是使用-iR选项随即产生待扫描的主机,或者使用-iL选项从一个包含主机名或IP地址列表的文件中读取目标主机,这些主机名或IP地址使用空格、制表符或换行隔开。-F nmap只扫描在nmap内建的服务文件中已知的端口,如果不指定该选项,nmap将扫描端口1-1024及包含在nmap-services文件中的所有其他端口。如果用-sO选项扫描协议,nmap将用它内建的协议文件(nmap-protocols文件)而不是默认地扫描所有256个协议。-A nmap使用所有的高级扫描选项-p 参数可以是一个单独的端口、一个用逗号隔开的端口列表、一个使用“-”表示的端口范围或者上述格式的任意组合。如果没有指定该选项,nmap将对包含前1024个端口的所有端口进行一次快速扫描。-e在多穴主机中,可以指定你用来进行网络通信的网络接口。-g可以选择一个源端口,从该端口执行所有的扫描。--ttlnmap其发送的任何报文在到中间路由器的跳后会失效。--packet-trace 可以显示扫描期间nmap发送和接收的各个报文的详细列表,这对调试非常有用。要与-o选项之一联合使用,需要根权限,以将所有的数据记录到文件。--scanflags可以使用这个选项手工的指定欲在扫描报文中设置的TCP标志。也可以指定TCP标志的OOred值的整数形式,或者标志的字符串表示形式。以上介绍的就是nmap在windows下和unix中的命令介绍。
Tcpdump 看这一篇就够了
tcpdump 是一款强大的网络抓包工具,它使用 libpcap 库来抓取网络数据包,这个库在几乎在所有的 Linux/Unix 中都有。熟悉 tcpdump 的使用能够帮助你分析调试网络数据,本文将通过一个个具体的示例来介绍它在不同场景下的使用方法。不管你是系统管理员,程序员,云原生工程师还是 yaml 工程师,掌握 tcpdump 的使用都能让你如虎添翼,升职加薪。
tcpdump 的常用参数如下:
额外再介绍几个常用参数:
-A 表示使用 ASCII 字符串打印报文的全部数据,这样可以使读取更加简单,方便使用 grep 等工具解析输出内容。 -X 表示同时使用十六进制和 ASCII 字符串打印报文的全部数据。这两个参数不能一起使用。例如:
后面可以跟上协议名称来过滤特定协议的流量,以 UDP 为例,可以加上参数 udp 或 protocol 17 ,这两个命令意思相同。
同理, tcp 与 protocol 6 意思相同。
使用过滤器 host 可以抓取特定目的地和源 IP 地址的流量。
也可以使用 src 或 dst 只抓取源或目的地:
使用 tcpdump 截取数据报文的时候,默认会打印到屏幕的默认输出,你会看到按照顺序和格式,很多的数据一行行快速闪过,根本来不及看清楚所有的内容。不过,tcpdump 提供了把截取的数据保存到文件的功能,以便后面使用其他图形工具(比如 wireshark,Snort)来分析。
-w 选项用来把数据报文输出到文件:
如果想实时将抓取到的数据通过管道传递给其他工具来处理,需要使用 -l 选项来开启行缓冲模式(或使用 -c 选项来开启数据包缓冲模式)。使用 -l 选项可以将输出通过立即发送给其他命令,其他命令会立即响应。
过滤的真正强大之处在于你可以随意组合它们,而连接它们的逻辑就是常用的 与/AND/ 、 或/OR/|| 和 非/not/!。
关于 tcpdump 的过滤器,这里有必要单独介绍一下。
机器上的网络报文数量异常的多,很多时候我们只关系和具体问题有关的数据报(比如访问某个网站的数据,或者 icmp 超时的报文等等),而这些数据只占到很小的一部分。把所有的数据截取下来,从里面找到想要的信息无疑是一件很费时费力的工作。而 tcpdump 提供了灵活的语法可以精确地截取关心的数据报,简化分析的工作量。这些选择数据包的语句就是过滤器(filter)!
Host 过滤器用来过滤某个主机的数据报文。例如:
该命令会抓取所有发往主机 1.2.3.4 或者从主机 1.2.3.4 发出的流量。如果想只抓取从该主机发出的流量,可以使用下面的命令:
Network 过滤器用来过滤某个网段的数据,使用的是 CIDR[2] 模式。可以使用四元组(x.x.x.x)、三元组(x.x.x)、二元组(x.x)和一元组(x)。四元组就是指定某个主机,三元组表示子网掩码为 255.255.255.0,二元组表示子网掩码为 255.255.0.0,一元组表示子网掩码为 255.0.0.0。例如,
抓取所有发往网段 192.168.1.x 或从网段 192.168.1.x 发出的流量:
抓取所有发往网段 10.x.x.x 或从网段 10.x.x.x 发出的流量:
和 Host 过滤器一样,这里也可以指定源和目的:
也可以使用 CIDR 格式:
Proto 过滤器用来过滤某个协议的数据,关键字为 proto,可省略。proto 后面可以跟上协议号或协议名称,支持 icmp, igmp, igrp, pim, ah, esp, carp, vrrp, udp和 tcp。因为通常的协议名称是保留字段,所以在与 proto 指令一起使用时,必须根据 shell 类型使用一个或两个反斜杠(/)来转义。Linux 中的 shell 需要使用两个反斜杠来转义,MacOS 只需要一个。
例如,抓取 icmp 协议的报文:
Port 过滤器用来过滤通过某个端口的数据报文,关键字为 port。例如:
截取数据只是第一步,第二步就是理解这些数据,下面就解释一下 tcpdump 命令输出各部分的意义。
最基本也是最重要的信息就是数据报的源地址/端口和目的地址/端口,上面的例子第一条数据报中,源地址 ip 是 192.168.1.106,源端口是 56166,目的地址是 124.192.132.54,目的端口是 80。 符号代表数据的方向。
此外,上面的三条数据还是 tcp 协议的三次握手过程,第一条就是 SYN 报文,这个可以通过 Flags [S] 看出。下面是常见的 TCP 报文的 Flags:
下面给出一些具体的例子,每个例子都可以使用多种方法来获得相同的输出,你使用的方法取决于所需的输出和网络上的流量。我们在排障时,通常只想获取自己想要的内容,可以通过过滤器和 ASCII 输出并结合管道与 grep、cut、awk 等工具来实现此目的。
例如,在抓取 HTTP 请求和响应数据包时,可以通过删除标志 SYN/ACK/FIN 来过滤噪声,但还有更简单的方法,那就是通过管道传递给 grep。在达到目的的同时,我们要选择最简单最高效的方法。下面来看例子。
从 HTTP 请求头中提取 HTTP 用户代理:
通过 egrep 可以同时提取用户代理和主机名(或其他头文件):
抓取 HTTP GET 流量:
也可以抓取 HTTP POST 请求流量:
注意:该方法不能保证抓取到 HTTP POST 有效数据流量,因为一个 POST 请求会被分割为多个 TCP 数据包。
上述两个表达式中的十六进制将会与 GET 和 POST 请求的 ASCII 字符串匹配。例如,tcp[((tcp[12:1] 0xf0) 2):4] 首先会确定我们感兴趣的字节的位置[3](在 TCP header 之后),然后选择我们希望匹配的 4 个字节。
提取 HTTP 请求的主机名和路径:
从 HTTP POST 请求中提取密码和主机名:
提取 Set-Cookie(服务端的 Cookie)和 Cookie(客户端的 Cookie):
查看网络上的所有 ICMP 数据包:
通过排除 echo 和 reply 类型的数据包使抓取到的数据包不包括标准的 ping 包:
可以提取电子邮件的正文和其他数据。例如,只提取电子邮件的收件人:
抓取 NTP 服务的查询和响应
通过 SNMP 服务,渗透测试人员可以获取大量的设备和系统信息。在这些信息中,系统信息最为关键,如操作系统版本、内核版本等。使用 SNMP 协议快速扫描程序 onesixtyone,可以看到目标系统的信息:
当抓取大量数据并写入文件时,可以自动切割为多个大小相同的文件。例如,下面的命令表示每 3600 秒创建一个新文件 capture-(hour).pcap,每个文件大小不超过 200*1000000 字节:
这些文件的命名为 capture-{1-24}.pcap,24 小时之后,之前的文件就会被覆盖。
可以通过过滤器 ip6 来抓取 IPv6 流量,同时可以指定协议如 TCP:
从之前保存的文件中读取 IPv6 UDP 数据报文:
在下面的例子中,你会发现抓取到的报文的源和目的一直不变,且带有标志位 [S] 和 [R],它们与一系列看似随机的目标端口进行匹配。当发送 SYN 之后,如果目标主机的端口没有打开,就会返回一个 RESET。这是 Nmap 等端口扫描工具的标准做法。
本例中 Nmap NSE 测试脚本 http-enum.nse 用来检测 HTTP 服务的合法 URL。
在执行脚本测试的主机上:
在目标主机上:
向 Google 公共 DNS 发起的出站 DNS 请求和 A 记录响应可以通过 tcpdump 抓取到:
抓取 80 端口的 HTTP 有效数据包,排除 TCP 连接建立过程的数据包(SYN / FIN / ACK):
通常 Wireshark(或 tshark)比 tcpdump 更容易分析应用层协议。一般的做法是在远程服务器上先使用 tcpdump 抓取数据并写入文件,然后再将文件拷贝到本地工作站上用 Wireshark 分析。
还有一种更高效的方法,可以通过 ssh 连接将抓取到的数据实时发送给 Wireshark 进行分析。以 MacOS 系统为例,可以通过 brew cask install wireshark 来安装,然后通过下面的命令来分析:
例如,如果想分析 DNS 协议,可以使用下面的命令:
抓取到的数据:
找出一段时间内发包最多的 IP,或者从一堆报文中找出发包最多的 IP,可以使用下面的命令:
cut -f 1,2,3,4 -d '.' : 以 . 为分隔符,打印出每行的前四列。即 IP 地址。
sort | uniq -c : 排序并计数
sort -nr : 按照数值大小逆向排序
本例将重点放在标准纯文本协议上,过滤出于用户名和密码相关的报文:
最后一个例子,抓取 DHCP 服务的请求和响应报文,67 为 DHCP 端口,68 为客户机端口。
本文主要介绍了 tcpdump 的基本语法和使用方法,并通过一些示例来展示它强大的过滤功能。将 tcpdump 与 wireshark 进行组合可以发挥更强大的功效,本文也展示了如何优雅顺滑地结合 tcpdump 和 wireshark。如果你想了解更多的细节,可以查看 tcpdump 的 man 手册。
IP地址中[:]:端口号 是什么意识?
在网络技术中,端口(Port)有好几种意思。集线器、交换机、路由 器的端口指的是连接其他网络设备的接口,如RJ-45端口、Serial端口等。我们 这里所指的端口不是指物理意义上的端口,而是特指TCP/IP协议中的端口,是逻 辑意义上的端口。
如果把IP地址比作一间房子,端口就是出入这间房子的门。真正的房子只有几个门,但是一个IP地址的端口可以有65536个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。
我们知道,一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过1个IP地址来 实现。那么,主机是怎样区分不同的网络服务呢?显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区 分不同的服务的。
需要注意的是,端口并不是一一对应的。比如你的电脑作为客户机访 问一台WWW服务器时,WWW服务器使用“80”端口与你的电脑通信,但你的电脑则 可能使用“3457”这样的端口,如图1所示。
按对应的协议类型,端口有两种:TCP端口和UDP端口。由于TCP和UDP 两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也 可以有235端口,两者并不冲突。
1.周知端口(Well Known Ports)
周知端口是众所周知的端口号,范围从0到1023,其中80端口分配给W WW服务,21端口分配给FTP服务等。我们在IE的地址栏里输入一个网址的时候( 比如)是不必指定端口号的,因为在默认情况下WWW服务的端口 号是“80”。
网络服务是可以使用其他端口号的,如果不是默认的端口号则应该在 地址栏上指定端口号,方法是在地址后面加上冒号“:”(半角),再加上端口 号。比如使用“8080”作为WWW服务的端口,则需要在地址栏里输入“”。
但是有些系统协议使用固定的端口号,它是不能被改变的,比如139 端口专门用于NetBIOS与TCP/IP之间的通信,不能手动改变。
2.动态端口(Dynamic Ports)
动态端口的范围是从1024到65535。之所以称为动态端口,是因为它 一般不固定分配某种服务,而是动态分配。动态分配是指当一个系统进程或应用 程序进程需要网络通信时,它向主机申请一个端口,主机从可用的端口号中分配 一个供它使用。当这个进程关闭时,同时也就释放了所占用的端口号。
怎样查看端口
一台服务器有大量的端口在使用,怎么来查看端口呢?有两种方式: 一种是利用系统内置的命令,一种是利用第三方端口扫描软件。
1.用“netstat -an”查看端口状态
在Windows 2000/XP中,可以在命令提示符下使用“netstat -an”查 看系统端口状态,可以列出系统正在开放的端口号及其状态.
2.用第三方端口扫描软件
第三方端口扫描软件有许多,界面虽然千差万别,但是功能却是类似 的。这里以“Fport” (可到或下载)为例讲解。“Fport”在命令提示符下使用,运行结果 与“netstat -an”相似,但是它不仅能够列出正在使用的端口号及类型,还可 以列出端口被哪个应用程序使用.
nmap使用求助
Nmap是一款网络扫描和主机检测的非常有用的工具。Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于winodws,linux,mac等操作系统
Nmap是一款非常强大的实用工具,可用于:检测活在网络上的主机(主机发现)检测主机上开放的端口(端口发现或枚举)检测到相应的端口(服务发现)的软件和版本检测操作系统,硬件地址,以及软件版本检测脆弱性的漏洞(Nmap的脚本)Nmap是一个非常普遍的工具,它有命令行界面和图形用户界面。本人包括以下方面的内容:介绍Nmap扫描中的重要参数操作系统检测Nmap使用教程Nmap使用不同的技术来执行扫描,包括:TCP的connect()扫描,TCP反向的ident扫描,FTP反弹扫描等。所有这些扫描的类型有自己的优点和缺点,我们接下来将讨论这些问题。 Nmap的使用取决于目标主机,因为有一个简单的(基本)扫描和预先扫描之间的差异。我们需要使用一些先进的技术来绕过防火墙和入侵检测/防御系统,以获得正确的结果。下面是一些基本的命令和它们的用法的例子:扫描单一的一个主机,命令如下:
代码如下:
#nmap nxadmin.com#nmap 192.168.1.2
扫描整个子网,命令如下:
代码如下:
#nmap 192.168.1.1/24
扫描多个目标,命令如下:
代码如下:
#nmap 192.168.1.2 192.168.1.5
扫描一个范围内的目标,如下:
代码如下:
#nmap 192.168.1.1-100 (扫描IP地址为192.168.1.1-192.168.1.100内的所有主机)
如果你有一个ip地址列表,将这个保存为一个txt文件,和namp在同一目录下,扫描这个txt内的所有主机,命令如下:
代码如下:
#nmap -iL target.txt
如果你想看到你扫描的所有主机的列表,用以下命令:
代码如下:
#nmap -sL 192.168.1.1/24
扫描除过某一个ip外的所有子网主机,命令:
代码如下:
#nmap192.168.1.1/24-exclude192.168.1.1
扫描除过某一个文件中的ip外的子网主机命令
代码如下:
#nmap192.168.1.1/24-excludefilexxx.txt(xxx.txt中的文件将会从扫描的主机中排除)
扫描特定主机上的80,21,23端口,命令如下
代码如下:
#nmap-p80,21,23192.168.1.1
从上面我们已经了解了Nmap的基础知识,下面我们深入的探讨一下Nmap的扫描技术
Tcp SYN Scan (sS) 这是一个基本的扫描方式,它被称为半开放扫描,因为这种技术使得Nmap不需要通过完整的握手,就能获得远程主机的信息。Nmap发送SYN包到远程主机,但是它不会产生任何会话.因此不会在目标主机上产生任何日志记录,因为没有形成会话。这个就是SYN扫描的优势.如果Nmap命令中没有指出扫描类型,默认的就是Tcp SYN.但是它需要root/administrator权限.
代码如下:
#nmap -sS 192.168.1.1
Tcp connect() scan(sT)如果不选择SYN扫描,TCP connect()扫描就是默认的扫描模式.不同于Tcp SYN扫描,Tcp connect()扫描需要完成三次握手,并且要求调用系统的connect().Tcp connect()扫描技术只适用于找出TCP和UDP端口.
代码如下:
#nmap -sT 192.168.1.1
Udp scan(sU)顾名思义,这种扫描技术用来寻找目标主机打开的UDP端口.它不需要发送任何的SYN包,因为这种技术是针对UDP端口的。UDP扫描发送UDP数据包到目标主机,并等待响应,如果返回ICMP不可达的错误消息,说明端口是关闭的,如果得到正确的适当的回应,说明端口是开放的.
代码如下:
#nmap -sU 192.168.1.1
FINscan(sF)
有时候TcpSYN扫描不是最佳的扫描模式,因为有防火墙的存在.目标主机有时候可能有IDS和IPS系统的存在,防火墙会阻止掉SYN数据包。发送一个设置了FIN标志的数据包并不需要完成TCP的握手.
代码如下:
a href="mailto:root@bt:~#nmap-sF192.168.1.8"root@bt:~#nmap-sF192.168.1.8/a/p pStartingNmap5.51at2012-07-0819:21PKTNmapscanreportfor192.168.1.8Hostisup(0.000026slatency).Notshown:999closedportsPORTSTATESERVICE111/tcpopen|filteredrpcbind
FIN扫描也不会在目标主机上创建日志(FIN扫描的优势之一).个类型的扫描都是具有差异性的,FIN扫描发送的包只包含FIN标识,NULL扫描不发送数据包上的任何字节,XMAS扫描发送FIN、PSH和URG标识的数据包.
PINGScan(sP)
PING扫描不同于其它的扫描方式,因为它只用于找出主机是否是存在在网络中的.它不是用来发现是否开放端口的.PING扫描需要ROOT权限,如果用户没有ROOT权限,PING扫描将会使用connect()调用.
代码如下:
#nmap-sP192.168.1.1
版本检测(sV)
版本检测是用来扫描目标主机和端口上运行的软件的版本.它不同于其它的扫描技术,它不是用来扫描目标主机上开放的端口,不过它需要从开放的端口获取信息来判断软件的版本.使用版本检测扫描之前需要先用TCPSYN扫描开放了哪些端口.
代码如下:
#nmap-sV192.168.1.1
Idlescan(sL)
Idlescan是一种先进的扫描技术,它不是用你真实的主机Ip发送数据包,而是使用另外一个目标网络的主机发送数据包.
代码如下:
#nmap-sL192.168.1.6192.168.1.1
Idlescan是一种理想的匿名扫描技术,通过目标网络中的192.168.1.6向主机192.168.1.1发送数据,来获取192.168.1.1开放的端口
有需要其它的扫描技术,如FTPbounce(FTP反弹),fragmentationscan(碎片扫描),IPprotocolscan(IP协议扫描),以上讨论的是几种最主要的扫描方式.
Nmap的OS检测(O)
Nmap最重要的特点之一是能够远程检测操作系统和软件,Nmap的OS检测技术在渗透测试中用来了解远程主机的操作系统和软件是非常有用的,通过获取的信息你可以知道已知的漏洞。Nmap有一个名为的nmap-OS-DB数据库,该数据库包含超过2600操作系统的信息。Nmap把TCP和UDP数据包发送到目标机器上,然后检查结果和数据库对照。
代码如下:
InitiatingSYNStealthScanat10:21Scanninglocalhost(127.0.0.1)[1000ports]Discoveredopenport111/tcpon127.0.0.1CompletedSYNStealthScanat10:21,0.08selapsed(1000totalports)InitiatingOSdetection(try#1)againstlocalhost(127.0.0.1)RetryingOSdetection(try#2)againstlocalhost(127.0.0.1)
上面的例子清楚地表明,Nmap的首次发现开放的端口,然后发送数据包发现远程操作系统。操作系统检测参数是O(大写O)
Nmap的操作系统指纹识别技术:
设备类型(路由器,工作组等)运行(运行的操作系统)操作系统的详细信息(操作系统的名称和版本)网络距离(目标和攻击者之间的距离跳)
如果远程主机有防火墙,IDS和IPS系统,你可以使用-PN命令来确保不ping远程主机,因为有时候防火墙会组织掉ping请求.-PN命令告诉Nmap不用ping远程主机。
代码如下:
#nmap-O-PN192.168.1.1/24
以上命令告诉发信主机远程主机是存活在网络上的,所以没有必要发送ping请求,使用-PN参数可以绕过PING命令,但是不影响主机的系统的发现.
Nmap的操作系统检测的基础是有开放和关闭的端口,如果OSscan无法检测到至少一个开放或者关闭的端口,会返回以下错误:
代码如下:
Warning:OSScanresultsmaybeunreliablebecausewecouldnotfindatleast1openand1closedport
OSScan的结果是不可靠的,因为没有发现至少一个开放或者关闭的端口
这种情况是非常不理想的,应该是远程主机做了针对操作系统检测的防范。如果Nmap不能检测到远程操作系统类型,那么就没有必要使用-osscan_limit检测。
想好通过Nmap准确的检测到远程操作系统是比较困难的,需要使用到Nmap的猜测功能选项,–osscan-guess猜测认为最接近目标的匹配操作系统类型。
代码如下:
#nmap-O--osscan-guess192.168.1.1
下面是扫描类型说明
-sTTCPconnect()扫描:这是最基本的TCP扫描方式。connect()是一种系统调用,由操作系统提供,用来打开一个连接。如果目标端口有程序监听,connect()就会成功返回,否则这个端口是不可达的。这项技术最大的优点是,你勿需root权限。任何UNIX用户都可以自由使用这个系统调用。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。
-sSTCP同步扫描(TCPSYN):因为不必全部打开一个TCP连接,所以这项技术通常称为半开扫描(half-open)。你可以发出一个TCP同步包(SYN),然后等待回应。如果对方返回SYN|ACK(响应)包就表示目标端口正在监听;如果返回RST数据包,就表示目标端口没有监听程序;如果收到一个SYN|ACK包,源主机就会马上发出一个RST(复位)数据包断开和目标主机的连接,这实际上有我们的操作系统内核自动完成的。这项技术最大的好处是,很少有系统能够把这记入系统日志。不过,你需要root权限来定制SYN数据包。
-sF-sX-sN秘密FIN数据包扫描、圣诞树(XmasTree)、空(Null)扫描模式:即使SYN扫描都无法确定的情况下使用。一些防火墙和包过滤软件能够对发送到被限制端口的SYN数据包进行监视,而且有些程序比如synlogger和courtney能够检测那些扫描。这些高级的扫描方式可以逃过这些干扰。些扫描方式的理论依据是:关闭的端口需要对你的探测包回应RST包,而打开的端口必需忽略有问题的包(参考RFC793第64页)。FIN扫描使用暴露的FIN数据包来探测,而圣诞树扫描打开数据包的FIN、URG和PUSH标志。不幸的是,微软决定完全忽略这个标准,另起炉灶。所以这种扫描方式对Windows95/NT无效。不过,从另外的角度讲,可以使用这种方式来分别两种不同的平台。如果使用这种扫描方式可以发现打开的端口,你就可以确定目标注意运行的不是Windows系统。如果使用-sF、-sX或者-sN扫描显示所有的端口都是关闭的,而使用SYN扫描显示有打开的端口,你可以确定目标主机可能运行的是Windwos系统。现在这种方式没有什么太大的用处,因为nmap有内嵌的操作系统检测功能。还有其它几个系统使用和windows同样的处理方式,包括Cisco、BSDI、HP/UX、MYS、IRIX。在应该抛弃数据包时,以上这些系统都会从打开的端口发出复位数据包。
-sPping扫描:有时你只是想知道此时网络上哪些主机正在运行。通过向你指定的网络内的每个IP地址发送ICMPecho请求数据包,nmap就可以完成这项任务。如果主机正在运行就会作出响应。不幸的是,一些站点例如:microsoft.com阻塞ICMPecho请求数据包。然而,在默认的情况下nmap也能够向80端口发送TCPack包,如果你收到一个RST包,就表示主机正在运行。nmap使用的第三种技术是:发送一个SYN包,然后等待一个RST或者SYN/ACK包。对于非root用户,nmap使用connect()方法。在默认的情况下(root用户),nmap并行使用ICMP和ACK技术。注意,nmap在任何情况下都会进行ping扫描,只有目标主机处于运行状态,才会进行后续的扫描。如果你只是想知道目标主机是否运行,而不想进行其它扫描,才会用到这个选项。
-sUUDP扫描:如果你想知道在某台主机上提供哪些UDP(用户数据报协议,RFC768)服务,可以使用这种扫描方法。nmap首先向目标主机的每个端口发出一个0字节的UDP包,如果我们收到端口不可达的ICMP消息,端口就是关闭的,否则我们就假设它是打开的。有些人可能会想UDP扫描是没有什么意思的。但是,我经常会想到最近出现的solarisrpcbind缺陷。rpcbind隐藏在一个未公开的UDP端口上,这个端口号大于32770。所以即使端口111(portmap的众所周知端口号)被防火墙阻塞有关系。但是你能发现大于30000的哪个端口上有程序正在监听吗?使用UDP扫描就能!cDcBackOrifice的后门程序就隐藏在Windows主机的一个可配置的UDP端口中。不考虑一些通常的安全缺陷,一些服务例如:snmp、tftp、NFS使用UDP协议。不幸的是,UDP扫描有时非常缓慢,因为大多数主机限制ICMP错误信息的比例(在RFC1812中的建议)。例如,在Linux内核中(在net/ipv4/icmp.h文件中)限制每4秒钟只能出现80条目标豢纱锏肾CMP消息,如果超过这个比例,就会给1/4秒钟的处罚。solaris的限制更加严格,每秒钟只允许出现大约2条ICMP不可达消息,这样,使扫描更加缓慢。nmap会检测这个限制的比例,减缓发送速度,而不是发送大量的将被目标主机丢弃的无用数据包。不过Micro$oft忽略了RFC1812的这个建议,不对这个比例做任何的限制。所以我们可以能够快速扫描运行Win95/NT的主机上的所有65K个端口。
-sAACK扫描:这项高级的扫描方法通常用来穿过防火墙的规则集。通常情况下,这有助于确定一个防火墙是功能比较完善的或者是一个简单的包过滤程序,只是阻塞进入的SYN包。这种扫描是向特定的端口发送ACK包(使用随机的应答/序列号)。如果返回一个RST包,这个端口就标记为unfiltered状态。如果什么都没有返回,或者返回一个不可达ICMP消息,这个端口就归入filtered类。注意,nmap通常不输出unfiltered的端口,所以在输出中通常不显示所有被探测的端口。显然,这种扫描方式不能找出处于打开状态的端口。
-sW对滑动窗口的扫描:这项高级扫描技术非常类似于ACK扫描,除了它有时可以检测到处于打开状态的端口,因为滑动窗口的大小是不规则的,有些操作系统可以报告其大小。这些系统至少包括:某些版本的AIX、Amiga、BeOS、BSDI、Cray、Tru64UNIX、DG/UX、OpenVMS、DigitalUNIX、OpenBSD、OpenStep、QNX、Rhapsody、SunOS4.x、Ultrix、VAX、VXWORKS。从nmap-hackers邮件3列表的文档中可以得到完整的列表。
-sRRPC扫描。这种方法和nmap的其它不同的端口扫描方法结合使用。选择所有处于打开状态的端口向它们发出SunRPC程序的NULL命令,以确定它们是否是RPC端口,如果是,就确定是哪种软件及其版本号。因此你能够获得防火墙的一些信息。诱饵扫描现在还不能和RPC扫描结合使用。
-bFTP反弹攻击(bounceattack):FTP协议(RFC959)有一个很有意思的特征,它支持代理FTP连接。也就是说,我能够从evil.com连接到FTP服务器target.com,并且可以要求这台FTP服务器为自己发送Internet上任何地方的文件!1985年,RFC959完成时,这个特征就能很好地工作了。然而,在今天的Internet中,我们不能让人们劫持FTP服务器,让它向Internet上的任意节点发送数据。如同Hobbit在1995年写的文章中所说的,这个协议"能够用来做投递虚拟的不可达邮件和新闻,进入各种站点的服务器,填满硬盘,跳过防火墙,以及其它的骚扰活动,而且很难进行追踪"。我们可以使用这个特征,在一台代理FTP服务器扫描TCP端口。因此,你需要连接到防火墙后面的一台FTP服务器,接着进行端口扫描。如果在这台FTP服务器中有可读写的目录,你还可以向目标端口任意发送数据(不过nmap不能为你做这些)。传递给-b功能选项的参数是你要作为代理的FTP服务器。语法格式为:-busername:password@server:port。除了server以外,其余都是可选的。如果你想知道什么服务器有这种缺陷,可以参考我在Phrack51发表的文章。还可以在nmap的站点得到这篇文章的最新版本。
通用选项这些内容不是必需的,但是很有用。
-P0在扫描之前,不必ping主机。有些网络的防火墙不允许ICMPecho请求穿过,使用这个选项可以对这些网络进行扫描。microsoft.com就是一个例子,因此在扫描这个站点时,你应该一直使用-P0或者-PT80选项。
-PT扫描之前,使用TCPping确定哪些主机正在运行。nmap不是通过发送ICMPecho请求包然后等待响应来实现这种功能,而是向目标网络(或者单一主机)发出TCPACK包然后等待回应。如果主机正在运行就会返回RST包。只有在目标网络/主机阻塞了ping包,而仍旧允许你对其进行扫描时,这个选项才有效。对于非root用户,我们使用connect()系统调用来实现这项功能。使用-PT来设定目标端口。默认的端口号是80,因为这个端口通常不会被过滤。
-PS对于root用户,这个选项让nmap使用SYN包而不是ACK包来对目标主机进行扫描。如果主机正在运行就返回一个RST包(或者一个SYN/ACK包)。
-PI设置这个选项,让nmap使用真正的ping(ICMPecho请求)来扫描目标主机是否正在运行。使用这个选项让nmap发现正在运行的主机的同时,nmap也会对你的直接子网广播地址进行观察。直接子网广播地址一些外部可达的IP地址,把外部的包转换为一个内向的IP广播包,向一个计算机子网发送。这些IP广播包应该删除,因为会造成拒绝服务攻击(例如smurf)。
0条大神的评论