端口扫描
在收集到网络地址后,对网络中所有主机进行存活扫描与端口扫描,以此来发现内网中的服务或者可能存在的漏洞。
(1)nmap
安装好nmap软件,直接按下一步的话,会在本地的C:\Program Files (x86)下生成nmap目录,然后打开cmd,进入该目录,使用nmap -sP ip地址/子网掩码,即可对该ip网段进行扫描,主要是扫描内网ip。直接使用nmap+ip地址是对该ip地址的端口扫描,而加上-sY -p 1-6000是指对1-6000这个端口范围进行扫描,-sT是对tcp进行扫描,p针对端口。
(2)S扫描器
S.exe扫描使用的时cmd命令,S TCP 10.1.1.1 10.1.1.254 135 445时对这个ip范围内的135和445两个端口进行扫描,S TCP 10.1.1.1 10.1.1.254 1-500 500对10.1.1.1-254这个ip范围内的1-500端口范围内进行以500线程速度扫描。S TCP 10.1.1.1 1-6000 /Save,扫描10.1.1.1这IP中的1到6000端口,将结果写入Result.txt。S TCP 10.1.1.1 10.1.1.255 135 /Save,扫描10.1.1.1到10.1.1.255这IP段中的135端口,将结果写入Result.txt。
(3)proxychains代理扫描
使用kali的proxychains对这个端口进行扫描,将tunnel.aspx放到win8的web目录下,然后在kali远程打开它,打开终端进入reGeorg目录下,使用命令python reGeorgSocksProxy.py -u http://目标机的ip/tunnel.aspx对它挂代理,然后将proxychains.conf文件修改代理端口,然后挂代理使用nmap对10.1.1.1进行扫描,但是该扫描由于是socks5代理只支持tcp/udp,所以要针对性的扫描,不能使用-sp参数。
(4)nc扫描
nc进行扫描,使用命令nc -nvv -w2 -z 10.1.1.1 1-6000,不过速度太慢,一个一个端口扫的。
(5)御剑无字典大小限制版
御剑扫描端口呢,大范围扫描的时候,其中有内网ip的端口会忽略的跳过了,而且端口开放需要自己输入,不过时间够快。
(6)查找终端工具
终端检测工具,扫描时大范围扫描的,而且确确实实知道ip地址,扫描的端口过于大,速度非常慢
(7)ScanPort
工具简单易用,但是扫描端口容易不全,而且还是只能扫出开放端口。
(8)portscanruanjian
工具是有点简单,不过扫描端口只能扫出开放端口,扫不出监听端口。
(9)自写脚本
php,python,perl,ruby,java,c等程序都可以用来做端口扫描,同时还可以使用bat或者shell脚本来做扫描。
python
#!/usr/bin/env python
import socket
def get_ip_status(ip,port):
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
server.connect((ip,port))
print(’{0} port {1} is open’.format(ip, port))
except Exception as err:
print(’{0} port {1} is not open’.format(ip,port))
finally:
server.close()
if name == ‘main’:
host = ‘10.0.0.11’
for port in range(20,100):
get_ip_status(host,port)
php
a
r
r
=
[
80
,
8080
,
3306
]
;
f
o
r
e
a
c
h
(
arr = [80,8080,3306]; foreach (
arr=[80,8080,3306];foreach(arr as $port) {
f
p
=
@
f
s
o
c
k
o
p
e
n
(
′
172.29.159.19
8
′
,
fp = @fsockopen('172.29.159.198',
fp=@fsockopen(′172.29.159.198′,port,
e
r
r
n
o
,
errno,
errno,errstr,0.1);
if (!$fp) {
echo $port." closed\n";
}else{
echo $port." Opend\n";
}
}
ruby
- require ‘socket’ #socket library
- def open_port(host, port)
- sock = Socket.new(:INET, :STREAM)
- raw = Socket.sockaddr_in(port, host)
- puts “#{port} open.” if sock.connect(raw)
- rescue (Errno::ECONNREFUSED)
- rescue(Errno::ETIMEDOUT)
- end
- def main(host, start_port, end_port)
- until start_port == end_port do
-
open_port(host, start_port)
-
start_port += 1
- end
- end
- main ARGV[0], ARGV[1].to_i, ARGV[2].to_i
ruby scanner.rb localhost 1 100