2017-12-05 6 views
0

내 (디버그) 네트워크에서 '재생'해야하는 WireShark 캡처 ​​파일이 있습니다. 패킷을 읽고 해석 할 수 있지만 소스 IP 주소 및 포트와 같이 패킷을 보내기 전에 몇 가지 세부 사항을 조정해야합니다.PCap.Net 패킷 데이터는 어떻게 변경합니까?

그러나 PcapDotNet.Packets.Packet의 모든 데이터는 읽기 전용입니다. 그냥 세터가 있습니다. 예를 들어 Ethernet.IpV4.Source 설정이 작동하지 않습니다.

IpV4Address.TryParse("192.168.1.10", out var newAddress); // for demo sake. 
packet.Ethernet.IpV4.Source = newAddress; // Won't work 

새로운 패킷을 처음부터 만드는 것을 피하는 간단한 방법이 있습니까? 아니면 약간 다른 패킷을 만드는 유일한 방법입니까?

+0

아마도 반사를 통해 할 수 있지만 저장 방법에 따라 달라질 수 있습니다. –

답변

0

패킷을 inplace로 변경하는 대신 이전 패킷을 기반으로 새 패킷을 만들어야합니다.

보관할 각 레이어에 이전 패킷과 ExtractLayer()을 사용할 수 있으며 필요한 경우 레이어 속성을 변경할 수 있습니다. 당신이해야하므로,

IpV4Layer ipV4Layer = packet.Ethernet.IpV4.ExtractLayer(); 
ipV4Layer.Source = newAddress; 

Packet newPacket = PacketBuild.Build(DateTime.Now, packet.Ethernet.ExtractLayer(), ipV4Layer, packet.Ethernet.IpV4.Payload.ExtractLayer()); 

당신은 아마 또한 IPv4의 체크섬을 재설정 할 :

이 경우

, 당신은 할 수

ipV4Layer.HeaderChecksum = null; 

을 그리고 당신은 비슷한해야 할 수도 있습니다 UDP 레이어 또는 TCP 레이어를 IPv4 레이어의 맨 위에 배치합니다.