端口扫描

简单的端口扫描器代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from socket import *
host = sys.argv[1] #读取端口及目标服务器
ports = sys.argv[2].split('-')
start_port = int(ports[0]) #传递端口的范围
end_port = int(ports[1])
target_ip = gethostbyname(host) #传递目标IP地址
opened_ports = []
#测试TCP端口连接
for port in range(start_port, end_port):
sock = socket(AF_INET, SOCK_STREAM) #IPv4,TCP连接
sock.settimeout(10)
result = sock.connec_ex(target_ip, port)
if result == 0:
opened_ports.append(port)
print('Opened poers:')
for i in opened_ports: #输出端口开放结果
print(i)

然后用命令行的方式进行传参python wsw.py 127.0.0.1 100-200
先用命令行进入wsw.py文件所在的文件,再执行上方代码。

AF_INET(又称 PF_INET)是 IPv4 网络协议的套接字类型,AF_INET6则是IPv6 的;而 AF_UNIX 则是 Unix 系统本地通信。
选择 AF_INET 的目的就是使用 IPv4 进行通信。因为 IPv4 使用 32 位地址,相比IPv6 的 128 位来说,计算更快,便于用于局域网通信。而且 AF_INET 相比 AF_UNIX 更具通用性,因为 Windows 上有 AF_INET 而没有 AF_UNIX。

SOCK_STREAM:TCP是连接的,提供序列化的,可靠的,双向连接的字节流。支持带外数据传输

多线程端口扫描代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# -*- coding: utf-8 -*-
import sys
import threading
from socket import *
print('dsjfhdj')
def tcp_test(port):
sock = socket(AF_INET, SOCK_STREAM)
sock.settimeout(10)
result = sock.connect_ex((target_ip, port))
if result == 0:
lock.acquire() #加锁
print("Opened Port:",port)
lock.release() #释放锁
if __name__=='__main__':
host = sys.argv[1]
portstrs = sys.argv[2].split('-')
start_port = int(portstrs[0])
end_port = int(portstrs[1])
target_ip = gethostbyname(host)
lock = threading.Lock()
for port in range(start_port, end_port):
threading.Thread(target = tcp_test, args = (port,))

ading.Thread(target = tcp_test, args = (port,)) 用来创建一个线程,该函数的第一个参数是一个线程中执行的函数,第二个参数必须是个元组,作为函数的输入,由于 tcp_test 函数只有一个参数,所以我们使用(port,)这种形式表示这个参数为元组。

实现TCP测试函数,需要注意print输出时候需要加锁,如果不加锁可能会出现多个输出混合在一起的错误状态,而锁需要在程序启动时创建,从而能让新建的线程共享这个锁, 注意当输出执行完后要释放锁lock

端口扫描: http://www.yukaige.com/?p=160

创建服务端和客户端:

代码详解:
http://www.cnblogs.com/kellyseeme/p/5525026.html

python socket编程详细介绍:
http://blog.csdn.net/rebelqsp/article/details/22109925

文章目录
  1. 1. 简单的端口扫描器代码:
  2. 2. 多线程端口扫描代码:
  3. 3. 创建服务端和客户端: