[PYTHON] scapy에서 변경된 src / dst로 pcap에서 패킷 보내기
PYTHONscapy에서 변경된 src / dst로 pcap에서 패킷 보내기
나는 이전에 기록 된 트래픽 (pcap 형식으로 캡처 됨)을 scapy와 함께 보내려고합니다. 현재 나는 원래의 Ether 레이어를 스트라이핑 할 때 붙어 있습니다. 트래픽은 다른 호스트에서 캡쳐되었으며 기본적으로 IP 및 Ether 레이어 src 및 dst를 모두 변경해야합니다. 나는 IP 레이어를 대체하고 체크섬을 다시 계산할 수 있었지만 Ether 레이어로 인해 문제가 발생했습니다.
누구나 IP 및 Ether 레이어 (src 및 dst)에 적용된 변경 사항이있는 캡처 파일에서 패킷을 재전송 한 경험이 있습니까? 또한 캡쳐는 Gb의 다소 큰 커플입니다. 그런 트래픽 양으로 얼마나 까다로운 실적이 나는가요?
해결법
-
==============================
1.이 예제를 확인하십시오.
이 예제를 확인하십시오.
from scapy.all import * from scapy.utils import rdpcap pkts=rdpcap("FileName.pcap") # could be used like this rdpcap("filename",500) fetches first 500 pkts for pkt in pkts: pkt[Ether].src= new_src_mac # i.e new_src_mac="00:11:22:33:44:55" pkt[Ether].dst= new_dst_mac pkt[IP].src= new_src_ip # i.e new_src_ip="255.255.255.255" pkt[IP].dst= new_dst_ip sendp(pkt) #sending packet at layer 2
코멘트:
-
==============================
2.내가 너라면, Scapy가 Ether 레이어를 처리하게하고 send () 함수를 사용한다. 예 :
내가 너라면, Scapy가 Ether 레이어를 처리하게하고 send () 함수를 사용한다. 예 :
ip_map = {"1.2.3.4": "10.0.0.1", "1.2.3.5": "10.0.0.2"} for p in PcapReader("filename.cap"): if IP not in p: continue p = p[IP] # if you want to use a constant map, only let the following line p.src = "10.0.0.1" p.dst = "10.0.0.2" # if you want to use the original src/dst if you don't find it in ip_map p.src = ip_map.get(p.src, p.src) p.dst = ip_map.get(p.dst, p.dst) # if you want to drop the packet if you don't find both src and dst in ip_map if p.src not in ip_map or p.dst not in ip_map: continue p.src = ip_map[p.src] p.dst = ip_map[p.dst] # as suggested by @AliA, we need to let Scapy compute the correct checksum del(p.chksum) # then send the packet send(p)
-
==============================
3.글쎄, scapy와 함께 나는 다음을 생각해 냈다 (나의 파이썬에 유감스럽게 생각한다). 희망적으로 그것은 누군가를 도울 것입니다. pcap 파일의 모든 패킷을 메모리로 읽어들이는 간단한 시나리오가 있었지만 대용량 캡처 파일에 문제가 발생할 수 있습니다.
글쎄, scapy와 함께 나는 다음을 생각해 냈다 (나의 파이썬에 유감스럽게 생각한다). 희망적으로 그것은 누군가를 도울 것입니다. pcap 파일의 모든 패킷을 메모리로 읽어들이는 간단한 시나리오가 있었지만 대용량 캡처 파일에 문제가 발생할 수 있습니다.
from scapy.all import * global src_ip, dst_ip src_ip = 1.1.1.1 dst_ip = 2.2.2.2 infile = "dump.pcap" try: my_reader = PcapReader(infile) my_send(my_reader) except IOError: print "Failed reading file %s contents" % infile sys.exit(1) def my_send(rd, count=100): pkt_cnt = 0 p_out = [] for p in rd: pkt_cnt += 1 np = p.payload np[IP].dst = dst_ip np[IP].src = src_ip del np[IP].chksum p_out.append(np) if pkt_cnt % count == 0: send(PacketList(p_out)) p_out = [] # Send remaining in final batch send(PacketList(p_out)) print "Total packets sent %d" % pkt_cn
-
==============================
4.올바른 체크섬을 위해 delp [UDP] .checksum을 추가해야했습니다.
올바른 체크섬을 위해 delp [UDP] .checksum을 추가해야했습니다.
from https://stackoverflow.com/questions/8726881/sending-packets-from-pcap-with-changed-src-dst-in-scapy by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] SQLAlchemy : 'and` 및`or`를 사용하면 예기치 않은 결과가 발생합니다. (0) | 2018.11.01 |
---|---|
[PYTHON] numpy 배열을 PySide QPixmap으로 변환 (0) | 2018.11.01 |
[PYTHON] SQLAlchemy를 Google Cloud SQL과 함께 사용할 수 있습니까? (0) | 2018.11.01 |
[PYTHON] 두 문자열이 파이썬에서 서로의 순열인지 확인하기 (0) | 2018.11.01 |
[PYTHON] Pandas : dtype 'object'를 int로 변환합니다. (0) | 2018.11.01 |