0
내가 PcapDorNet
DLL을 사용하고 그리고 난 내 트래픽 단편화하려고 :IP 단편화의 원인 체크섬 잘못된 메시지
private IEnumerable<Packet> SplitPacket(Packet packet, int numberOfFragments)
{
IpV4Datagram ipV4Datagram = packet.Ethernet.IpV4;
Datagram datagram = packet.Ethernet.IpV4.Payload;
TransportLayer transportlayer = GetTransportLayer(packet);
if (transportlayer != null)
{
EthernetLayer ethernet = (EthernetLayer)packet.Ethernet.ExtractLayer();
ILayer layer = packet.Ethernet.IpV4.ExtractLayer();
IpV4Layer ipV4Layer = (IpV4Layer)packet.Ethernet.IpV4.ExtractLayer();
ipV4Layer.HeaderChecksum = null;
DateTime packetTimestamp = packet.Timestamp;
PayloadLayer payload = (PayloadLayer)packet.Ethernet.IpV4.Payload.ExtractLayer(); //extract the data
int totalLength = payload.Length;
int partialLength = totalLength/numberOfFragments; //split data into smaller segments
partialLength = (partialLength/8) * 8; //make sure it's divisible with 8
if (partialLength == 0)
partialLength = 8;
//(http://en.wikipedia.org/wiki/IPv4#Fragmentation_and_reassembly)
ushort offset = 0; //send one by one
while (offset < totalLength)
{
int fragmentLength = partialLength; //get length for this fragment
IpV4FragmentationOptions options = IpV4FragmentationOptions.MoreFragments;
if (offset + fragmentLength >= totalLength) //is this the last fragment ? trim length if needed
{
options = IpV4FragmentationOptions.None;
fragmentLength = totalLength - offset;
}
byte[] newBuffer = ipV4Datagram.Payload.ToArray(); //copy the actual data into a new buffer
PayloadLayer newPayload = new PayloadLayer { Data = new Datagram(newBuffer, offset, fragmentLength) };
ipV4Layer.Fragmentation = new IpV4Fragmentation(options, offset); //change IP layer fragmentation options
transportlayer.Checksum = null;
yield return PacketBuilder.Build(packetTimestamp, ethernet, ipV4Layer, transportlayer, newPayload);
offset += (ushort)fragmentLength; //next offset
}
}
}
내 입력 패킷이 TCP packet
이고 출력이 4 개 패킷 : 3 IPv4 packets
와 마지막 TCP
입니다하지만,이
체크섬 : 제가받은 패킷을 TCP 계층 필드 아래 메시지 쇼 0x5d17 [(? 미정 ' TCP 체크섬 오프로드 "에 의한) 부정확 0xabb7되어야한다]
UDP와 마찬가지로 모든 UDP 패킷이 여러 IPv4 패킷으로 분할되고 마지막 UDP는 UDP이지만 UDP 경우에는 잘 보입니다. 내가 잘못하고 있니?
원래 패킷 단편화 참조하십시오 http://www.filedropper.com/desktop_122