public TCPPacket(byte[] buffer) { try { SourcePort = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 0)); DestinationPort = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 2)); ushort offsetAndFlags = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 12)); DataOffset = (byte)((offsetAndFlags >> 12) * 4); Flags = (TCPFlags)(offsetAndFlags & 511); // 0b111111111 = 511 Payload = buffer.Skip(DataOffset).ToArray(); IsValid = true; } catch (Exception ex) { SourcePort = 0; DestinationPort = 0; DataOffset = 0; Flags = TCPFlags.NONE; Payload = null; IsValid = false; Log.Ex(ex, "TCP 패킷 파싱 에러"); } }
public TCPPacket(byte[] buffer, int ignoreLength) { try { GlobalOffset = ignoreLength; SourcePort = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, ignoreLength + 0)); DestinationPort = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, ignoreLength + 2)); var offsetAndFlags = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, ignoreLength + 12)); DataOffset = (byte)((offsetAndFlags >> 12) * 4); Flags = (TCPFlags)(offsetAndFlags & 511); // 0b111111111 = 511 Payload = buffer.Skip(ignoreLength + DataOffset).ToArray(); IsValid = true; } catch { SourcePort = 0; DestinationPort = 0; DataOffset = 0; Flags = TCPFlags.NONE; Payload = null; IsValid = false; IpcClient.SendSignal(Signal.ClientPacketParseFail, new[] { "unable to tcplize" }, true); } }
public TCPPacket(byte[] buffer) { try { SourcePort = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 0)); DestinationPort = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 2)); SequenceNumber = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(buffer, 4)); AcknowledgementNumber = (uint)IPAddress.NetworkToHostOrder(BitConverter.ToInt32(buffer, 8)); ushort offsetAndFlags = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 12)); DataOffset = (byte)((offsetAndFlags >> 12) * 4); Flags = (TCPFlags)(offsetAndFlags & 511); // 0b111111111 = 511 Window = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 14)); Checksum = IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 16)); UrgentPointer = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(buffer, 18)); Payload = new byte[buffer.Length - DataOffset]; Buffer.BlockCopy(buffer, DataOffset, Payload, 0, Payload.Length); IsValid = true; } catch { SourcePort = 0; DestinationPort = 0; SequenceNumber = 0; AcknowledgementNumber = 0; DataOffset = 0; Flags = TCPFlags.NONE; Window = 0; Checksum = 0; UrgentPointer = 0; Payload = null; IsValid = false; } }