2016-10-31 8 views
0

자체 개발 네트워크 프로토콜을 테스트하기위한 스크립트를 작성하려고합니다. 따라서 요청을 보내기 위해 scapy를 사용하고 있습니다. 모든게 잘 작동하는 것,하지만 내 코드에서 지정하는 UDP 원본 포트가 보내는 프로세스 중에 변경되는 것 같습니다. Wireshark의 소스 포트는 내가 지정한 포트와 다릅니다. 또한 tcpdump를 사용하여 패킷을 캡처하려고 시도했지만 tcpdump도 잘못된 포트를 표시합니다. 전송하기 전에 hexdump를 확인한 결과 올바른 것으로 보입니다. 어떤 아이디어가 문제이며 어떻게 해결할 수 있습니까?scapy : UDP 소스 포트가 전송 후 변경됨

for x in arr: 
      cds = TestProtocol(HopCount = 0xe, Length = 0x4, Priority = 0x1, ServiceID = 0x3, 
          ReceiverAddrLen = 0x1, UniqueID1 = 0x1, 
          UniqueID2 = 0x1, SenderAddress = 0x1b4e, 
          PacketType = 0x02c2, data1 = 0x0004, 
          data2 = 0xe6a7, data3 = 0x0) 
      ip = IP() 
      ip.dst = destAddr 
      ip.src = srcAddr 
      udp = UDP() 

      udp.sport = 1743 #the port which changes 
      udp.dport = x 
      pack = ip/udp/cds 
      send(pack, verbose = True) 

답변

0

이것은 당신의 scapy 모듈이 포트를 변경 시킨다는 것을 의미합니다. 이것은 어떤 의미입니까?!

나는 udp 통신에 대해 "scapy"를 모르며 비단뱀 "소켓"모듈을 통해 어떤 이유가 있을지 모르십니까?

UDP-전송을 위해 나는 일반적으로 사용

import socket 

s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) 
s.bind(('192.168.66.33', 6022)) #bind local IP and Port 
s.sendto("Calling device", ('192.168.66.48', 6022)) #send string to other IP on same port 
data,addr = s.recvfrom(4096) #buf size 4096 bytes 
print str(data) #print data received from called device 

또한 TCP 물건이 사용할 수

+0

여기 scapy를 사용하는 이유는 scapy와 함께 쉽게 패킷이 특정로 보낼 조작 할 수 있다는 것입니다 숙주. 이것은 침투 테스트에 정말 유용합니다. 내 코드는 wireshark에 따라 작동합니다. 유일한 문제는 원본 포트입니다. 올바른 요청을 보내기 위해 설정해야합니다. – braheem38

+0

어떤 방법으로 패킷을 변경 하시겠습니까? 몇 바이트를 변경 하시겠습니까? "소켓"으로 왜 이것이 불가능합니까? 당신은 패키지를 받고, 디코딩하고, 변경하고, 인코딩하고, 다시 돌려 보낼 수 있습니다. –

+0

저는 이제 scapy를 파이썬의 소켓 구현과 결합 시켰습니다. 고맙습니다! – braheem38