Socket模块

简介

Socket 模块的主要目的是帮助在网络上的两个程序之间建立信息通道。在Python中提供了两个基本的Socket模块:服务端Socket和客户端Socket。当创建了一个服务端Socket之后,这个Socket就会在本机的一个端口上等待连接,客户端Socket会访问这个端口,当两者完成连接之后,就可以进行交互了

方法

image.png

学习Socket

https://www.runoob.com/python/python-socket.html

创建套接字

image.png

服务端和客户端方法

image.png

常用公共方法

TCP
image.png

UDP
image.png

获取服务端和客户端的IP地址

image.png

实现代码

服务端

  1. import socket
  2. ip = socket.gethostname()
  3. address = (ip, 9999)
  4. # 创建socket对象,同时设置通信模式,AF_INET代表IPv4,SOCK_STREAM代表流式socket,使用的是tcp协议
  5. server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  6. # 绑定到我们刚刚设置的ip和端口元组,代表我们的服务运行在本机的9999端口上
  7. server.bind(address)
  8. # 开始监听,5位最大挂起的连接数
  9. server.listen(5)
  10. # 输入问题,得到答案
  11. # input_Q = '23届冬奥会短道速滑1500冠军是谁?'
  12. print("服务启动")
  13. while True:
  14. print("server waiting")
  15. # accept()方法被动接受客户端连接,阻塞,等待连接.
  16. # client是客户端的socket对象,可以实现消息的接收和发送,addr表示客户端的地址
  17. client, addr = server.accept()
  18. data = client.recv(1024) # 代表从发过来的数据中读取1024byte的数据
  19. input_Q = str(data, encoding='utf-8')
  20. print(input_Q)

客户端

  1. import socket
  2. client = socket.socket()
  3. # 连接服务器
  4. ip = socket.gethostname()
  5. address = (ip, 9999)
  6. client.connect(address)
  7. data = '我爱你'
  8. # 发送数据
  9. client.send(data.encode('utf-8'))
  10. client.close()

image.png

python-nmap模块

参考链接

学习笔记 https://blog.csdn.net/qq_36119192/article/details/83717690 安装这个模块出现报错(即无法加载portScanner()类) https://blog.csdn.net/qq_41320827/article/details/105811022

portScanner()类

portScanner()类用于实现对指定主机进行端口扫描

  1. import nmap
  2. nm = nmap.PortScanner()

scan( host , port , args ) 方法

以指定方式扫描指定主机或网段的指定端口

参数:

host : 要扫描的主机或网段,可以是一个单独的ip:192.168.10.10 ;也可以是一个小范围网段:192.168.10.10-20 ;也可以是一个大网段:192.168.10.0/24
port : 可选参数,要扫描的端口,多个端口用逗号隔开,如:20,21,22,23,24
args :可选参数,要扫描的方式

  1. import nmap
  2. nm = nmap.PortScanner()
  3. nm.scan('192.168.10.10-100', '22,21','-sV')
  4. 也可以这样
  5. nm.scan(hosts='192.168.1.0/24', arguments='-n -sP -PE -PA21,23,80,3389')

command_line() 方法

返回的扫描方法映射到具体的nmap命令行,也就是我们上面执行的nm.scan()命令,对应的具体的nmap的命令

  1. import nmap
  2. nm = nmap.PortScanner()
  3. nm.scan('192.168.10.10-100', '22,21','-sV')
  4. a=nm.command_line()
  5. print(a)
  6. ###########################
  7. nmap -oX - -p 20,21 -sV 192.168.125.134

scaninfo() 方法

返回nmap扫描信息,格式为字典类型

  1. import nmap
  2. nm = nmap.PortScanner()
  3. nm.scan('192.168.10.10-100', '22,21','-sV')
  4. a=nm.scaninfo()
  5. print(a)
  6. ###########################
  7. {'tcp': {'services': '20-21', 'method': 'syn'}}

all_hosts() 方法

返回nmap扫描的主机清单,格式为列表类型

  1. import nmap
  2. nm = nmap.PortScanner()
  3. nm.scan('192.168.10.10-12', '22,21','-sV')
  4. ####################################################
  5. ['192.168.10.10','192.168.10.11','192.168.10.12']

查看扫描主机的详细信息

nm[‘192.168.125.134’]

  1. import nmap
  2. nm=nmap.PortScanner()
  3. nm.scan('192.168.125.134','445')
  4. a=nm['192.168.125.134'] #返回主机的详细信息
  5. print(a)
  6. ##################################
  7. {'status': {'state': 'up', 'reason': 'arp-response'},
  8. 'hostnames': [{'type': 'PTR', 'name': 'bogon'}],
  9. 'vendor': {'00:0C:29:F6:2B:F0': 'VMware'},
  10. 'addresses': {'mac': '00:0C:29:F6:2B:F0', 'ipv4': '192.168.125.134'},
  11. 'tcp': {445: {'product': 'Microsoft Windows 7 - 10 microsoft-ds', 'state': 'open', 'version': '', 'name': 'microsoft-ds', 'conf': '10', 'extrainfo': 'workgroup: WORKGROUP', 'reason': 'syn-ack', 'cpe': 'cpe:/o:microsoft:windows'}}}

查看主机扫描的端口包含的协议(TCP/UDP)

nmap[‘192.168.125.134’].all_protocols() 返回列表型数据

  1. import nmap
  2. nm=nmap.PortScanner()
  3. nm.scan('192.168.125.134','445')
  4. a=nm['192.168.125.134'].all_protocols() #返回主机扫描的端口包含的协议
  5. print(a)
  6. ##################################
  7. ['tcp']

查看扫描的端口哪些端口提供了TCP协议

nmap[‘192.168.125.134’][‘tcp’]

  1. import nmap
  2. nm=nmap.PortScanner()
  3. nm.scan('192.168.125.134','445')
  4. a=nm['192.168.125.134']['tcp'] #返回主机扫描的端口哪些端口包含了TCP协议,返回具体信息
  5. b=nm['192.168.125.134']['tcp'].keys() #只返还端口,返回列表型数据
  6. print(a)
  7. print(b)
  8. ##################################
  9. {445: {'product': 'Microsoft Windows 7 - 10 microsoft-ds', 'state': 'open', 'version': '', 'name': 'microsoft-ds', 'conf': '10', 'extrainfo': 'workgroup: WORKGROUP', 'reason': 'syn-ack', 'cpe': 'cpe:/o:microsoft:windows'}}
  10. [445]

查看该端口是否提供了TCP协议

nmap[‘192.168.125.134’].has_tcp(445) ,返回布尔类型的数据

  1. import nmap
  2. nm=nmap.PortScanner()
  3. nm.scan('192.168.125.134','445')
  4. a=nm['192.168.125.134'].has_tcp(445) #判断该端口是否提供TCP协议
  5. print(a)
  6. ##################################
  7. True

查看该协议下端口的状态

nmap[‘192.168.125.134’][‘tcp’][445][state]

  1. import nmap
  2. nm=nmap.PortScanner()
  3. nm.scan('192.168.125.134','445')
  4. a=nm['192.168.125.134']['tcp'][445]['state']
  5. print(a)
  6. ##################################
  7. open

Scapy模块

参考链接

https://www.cnblogs.com/Yunzhonghe/p/12301151.html#_1