scapy를 사용하여 나가는 http 패킷을 스니핑하고 몇 가지 새로운 http 헤더를 추가하여 전송합니다. 여기서 의도는 패킷을 손상시키지 않으면 서 새로운 헤더를 삽입하는 것입니다. 최대 값에서 모든 체크섬 재 계산은 필요한 경우 수행해야합니다.scapy를 사용하여 스니핑 한 패킷에 http 헤더를 추가하는 방법
SO에 관한 거의 모든 질문을했지만 해결책을 얻지 못했습니다.
다음은 내가 한 일입니다.
def parse(pkt):
if pkt.haslayer(TCP) and pkt.getlayer(TCP).dport == 80 and pkt.haslayer(Raw):
pkt = pkt/"New Header:value\r\n\r\n"
# OR i tried this
#pkt = pkt.getlayer(Raw).load/Raw.load(load="New Header:value\r\n\r\n")
#pkt.getlayer(Raw).load("New Header:value\r\n\r\n")
pkt.show()
#del pkt[IP].chksum
send(pkt)
#end parse function
# start sniffing
a=sniff(filter="tcp and (port 80)", prn=parse)
문제는 위의 코드는 일반 헤더를 추가하는 대신 새로운 원시 페이로드 섹션을 삽입하는 것입니다. 이미 HTTP 표준에 따라 헤더 종료를 나타내는 두 개의 새 줄 \ r \ n \ r \ n이 있습니다.
내가#pkt = pkt.getlayer(Raw).load[-2:]/Raw.load(load="New Header:value\r\n\r\n")
을 다음과 같이 수행하여 마지막 \ r \ n을 제거하는 노력이를 극복하기 위해하지만이하고는 "새 헤더는"남아있는 기존의 모든 헤더를 제거합니다.
나는 리눅스 민트에서 이것을 시도했다.
업데이트 : 이전 헤더가 포함될 새로운 http 페이로드를 만들려고하는데 일부를 추가 할 것입니다. 기존 레이어를 제거하는 방법을 도울 수있는 사람이 있습니까?
이것은 패킷 분석 도구로 수행하려고하는 매우 높은 수준의 작업입니다. HTTP 헤더가 두 개 (또는 그 이상)의 패킷으로 분리되면 어떻게 될까요? –
동의. 그러나 나는 당분간 그것을 무시할 수 있습니다. 고성능의 실제 응용 프로그램은 아마도 c로 작성되어야 할 것입니다. 기본 테스트 케이스가있는 POC는 문제가되지 않습니다. – fayyazkl
@ GregHewgill 그런데 살아있는 동안 냄새 맡는 동안 위에하는 다른 도구를 염두에두고 있습니까? 나는 pcap을 수정하는 것을 의미하지 않는다. – fayyazkl