/// <summary> Convert captured packet data into an object.</summary> public static Packet dataToPacket(int linkType, byte[] bytes, Timeval tv) { int ethProtocol; // record the length of the headers associated with this link layer type. // this length is the offset to the header embedded in the packet. lLen = LinkLayer.getLinkLayerLength(linkType); // extract the protocol code for the type of header embedded in the // link-layer of the packet int offset = LinkLayer.getProtoOffset(linkType); if (offset == -1) { // if there is no embedded protocol, assume IP? ethProtocol = EthernetProtocols_Fields.IP; } else { ethProtocol = ArrayHelper.extractInteger(bytes, offset, EthernetFields_Fields.ETH_CODE_LEN); } // try to recognize the ethernet type.. switch (ethProtocol) { // arp case EthernetProtocols_Fields.ARP: return(new ARPPacket(lLen, bytes, tv)); case EthernetProtocols_Fields.IP: // ethernet level code is recognized as IP, figure out what kind.. int ipProtocol = IPProtocol.extractProtocol(lLen, bytes); switch (ipProtocol) { // icmp case IPProtocols_Fields.ICMP: return(new ICMPPacket(lLen, bytes, tv)); // igmp case IPProtocols_Fields.IGMP: return(new IGMPPacket(lLen, bytes, tv)); // tcp case IPProtocols_Fields.TCP: return(new TCPPacket(lLen, bytes, tv)); // udp case IPProtocols_Fields.UDP: return(new UDPPacket(lLen, bytes, tv)); // unidentified ip.. default: return(new IPPacket(lLen, bytes, tv)); } // ethernet level code not recognized, default to anonymous packet.. //goto default; default: return(new EthernetPacket(lLen, bytes, tv)); } }
/// <summary> Create a new TCP packet.</summary> public TCPPacket(int lLen, byte[] bytes, Timeval tv) : this(lLen, bytes) { this._timeval = tv; }
/// <summary> Convert captured packet data into an object.</summary> public static Packet dataToPacket(int linkType, byte[] bytes, Timeval tv) { int ethProtocol; // record the length of the headers associated with this link layer type. // this length is the offset to the header embedded in the packet. lLen = LinkLayer.getLinkLayerLength(linkType); // extract the protocol code for the type of header embedded in the // link-layer of the packet int offset = LinkLayer.getProtoOffset(linkType); if (offset == -1) // if there is no embedded protocol, assume IP? ethProtocol = EthernetProtocols_Fields.IP; else ethProtocol = ArrayHelper.extractInteger(bytes, offset, EthernetFields_Fields.ETH_CODE_LEN); // try to recognize the ethernet type.. switch (ethProtocol) { // arp case EthernetProtocols_Fields.ARP: return new ARPPacket(lLen, bytes, tv); case EthernetProtocols_Fields.IP: // ethernet level code is recognized as IP, figure out what kind.. int ipProtocol = IPProtocol.extractProtocol(lLen, bytes); switch (ipProtocol) { // icmp case IPProtocols_Fields.ICMP: return new ICMPPacket(lLen, bytes, tv); // igmp case IPProtocols_Fields.IGMP: return new IGMPPacket(lLen, bytes, tv); // tcp case IPProtocols_Fields.TCP: return new TCPPacket(lLen, bytes, tv); // udp case IPProtocols_Fields.UDP: return new UDPPacket(lLen, bytes, tv); // unidentified ip.. default: return new IPPacket(lLen, bytes, tv); } // ethernet level code not recognized, default to anonymous packet.. //goto default; default: return new EthernetPacket(lLen, bytes, tv); } }
/// <summary> Create a new TCP packet.</summary> public TCPPacket(int lLen, byte[] bytes, Timeval tv) : this(lLen, bytes) { this._timeval = tv; }