2012-10-22 13 views
4

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 페이로드를 만들려고하는데 일부를 추가 할 것입니다. 기존 레이어를 제거하는 방법을 도울 수있는 사람이 있습니까?

+2

이것은 패킷 분석 도구로 수행하려고하는 매우 높은 수준의 작업입니다. HTTP 헤더가 두 개 (또는 그 이상)의 패킷으로 분리되면 어떻게 될까요? –

+0

동의. 그러나 나는 당분간 그것을 무시할 수 있습니다. 고성능의 실제 응용 프로그램은 아마도 c로 작성되어야 할 것입니다. 기본 테스트 케이스가있는 POC는 문제가되지 않습니다. – fayyazkl

+0

@ GregHewgill 그런데 살아있는 동안 냄새 맡는 동안 위에하는 다른 도구를 염두에두고 있습니까? 나는 pcap을 수정하는 것을 의미하지 않는다. – fayyazkl

답변

3

제가 올바르게 이해한다면 기존 헤더를 사용하여 기존 HTTP 요청을 업데이트해야한다는 것입니다. 원하는 것은 파이썬이 직접 할 수없는 문자열을 수정하는 것입니다 (문자열은 변경 불가능합니다).

old_hdr = pkt[Raw] 또는 old_hdr = pkt[TCP].payload

및 문자열처럼 조작 : 당신이 체크섬이 업데이트되지 않습니다 찾을 경우

new_hdr = 'New Header: value' 
hdr = old_hdr.split('\r\n') # This is a crappy hack. Parsing HTTP headers 
hdr.insert(new_hdr, 2)  # is a [solved problem][1]. 
send_hdr = '\r\n'.join(hdr) 
pkt[TCP].payload = send_hdr 

것은 삭제

그래서 당신이 무엇을해야 HTTP 헤더를 가지고있다 패킷을 보내기 전에 :

del pkt[TCP].chksum 

그리고 Scapy가 올바른 값으로 다시 돌려 줄 것입니다.

편집 : 방금 내 링크가 실패한 것으로 나타났습니다. Here은 HTTP 헤더를 구문 분석하는 방법입니다.

+0

고맙습니다. 나는 이것을 시험해보고 문제가있는 경우 다시 연락 할 것입니다. – fayyazkl

+0

확인해 주셔서 감사합니다. 다시 한 번 감사드립니다. – fayyazkl

관련 문제