| // Copyright 2018 The gVisor Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package sniffer |
| |
| import "time" |
| |
| type pcapHeader struct { |
| // MagicNumber is the file magic number. |
| MagicNumber uint32 |
| |
| // VersionMajor is the major version number. |
| VersionMajor uint16 |
| |
| // VersionMinor is the minor version number. |
| VersionMinor uint16 |
| |
| // Thiszone is the GMT to local correction. |
| Thiszone int32 |
| |
| // Sigfigs is the accuracy of timestamps. |
| Sigfigs uint32 |
| |
| // Snaplen is the max length of captured packets, in octets. |
| Snaplen uint32 |
| |
| // Network is the data link type. |
| Network uint32 |
| } |
| |
| const pcapPacketHeaderLen = 16 |
| |
| type pcapPacketHeader struct { |
| // Seconds is the timestamp seconds. |
| Seconds uint32 |
| |
| // Microseconds is the timestamp microseconds. |
| Microseconds uint32 |
| |
| // IncludedLength is the number of octets of packet saved in file. |
| IncludedLength uint32 |
| |
| // OriginalLength is the actual length of packet. |
| OriginalLength uint32 |
| } |
| |
| func newPCAPPacketHeader(incLen, orgLen uint32) pcapPacketHeader { |
| now := time.Now() |
| return pcapPacketHeader{ |
| Seconds: uint32(now.Unix()), |
| Microseconds: uint32(now.Nanosecond() / 1000), |
| IncludedLength: incLen, |
| OriginalLength: orgLen, |
| } |
| } |