@@ -25,22 +25,23 @@ var (
2525// IOSPacketHeader :)
2626// ref: https://github.com/gofmt/iOSSniffer/blob/master/pkg/sniffer/sniffer.go#L44
2727type IOSPacketHeader struct {
28- HdrSize uint32 `struc:"uint32,big"`
29- Version uint8 `struc:"uint8,big"`
30- PacketSize uint32 `struc:"uint32,big"`
31- Type uint8 `struc:"uint8,big"`
32- Unit uint16 `struc:"uint16,big"`
33- IO uint8 `struc:"uint8,big"`
34- ProtocolFamily uint32 `struc:"uint32,big"`
35- FramePreLength uint32 `struc:"uint32,big"`
36- FramePstLength uint32 `struc:"uint32,big"`
37- IFName string `struc:"[16]byte"`
38- Pid int32 `struc:"int32,little"`
39- ProcName string `struc:"[17]byte"`
40- Unknown uint32 `struc:"uint32,little"`
41- Pid2 int32 `struc:"int32,little"`
42- ProcName2 string `struc:"[17]byte"`
43- Unknown2 [8 ]byte `struc:"[8]byte"`
28+ HdrSize uint32 `struc:"uint32,big"`
29+ Version uint8 `struc:"uint8,big"`
30+ PacketSize uint32 `struc:"uint32,big"`
31+ Type uint8 `struc:"uint8,big"`
32+ Unit uint16 `struc:"uint16,big"`
33+ IO uint8 `struc:"uint8,big"`
34+ ProtocolFamily uint32 `struc:"uint32,big"`
35+ FramePreLength uint32 `struc:"uint32,big"`
36+ FramePstLength uint32 `struc:"uint32,big"`
37+ IFName string `struc:"[16]byte"`
38+ Pid int32 `struc:"int32,little"`
39+ ProcName string `struc:"[17]byte"`
40+ Unknown uint32 `struc:"uint32,little"`
41+ Pid2 int32 `struc:"int32,little"`
42+ ProcName2 string `struc:"[17]byte"`
43+ TsSec int `struc:"int32,big"` /* timestamp seconds */
44+ TsUsec int `struc:"int32,big"` /* timestamp microseconds */
4445}
4546
4647func (iph * IOSPacketHeader ) ToString () string {
@@ -80,12 +81,12 @@ func Start(device ios.DeviceEntry) error {
8081 if err != nil {
8182 return err
8283 }
83- packet , err := getPacket (decodedBytes )
84+ iph , packet , err := getPacket (decodedBytes )
8485 if err != nil {
8586 return err
8687 }
8788 if len (packet ) > 0 {
88- err = writePacket (f , packet )
89+ err = writePacket (f , iph , packet )
8990 if err != nil {
9091 return err
9192 }
@@ -137,11 +138,10 @@ func createPcap(name string) (*os.File, error) {
137138 return f , nil
138139}
139140
140- func writePacket (f * os.File , packet []byte ) error {
141- now := time .Now ()
141+ func writePacket (f * os.File , iph IOSPacketHeader , packet []byte ) error {
142142 phs := & PcaprecHdrS {
143- int ( now . Unix ()) ,
144- int ( now . UnixNano () / 1e3 - now . Unix () * 1e6 ) ,
143+ iph . TsSec ,
144+ iph . TsUsec ,
145145 len (packet ),
146146 len (packet ),
147147 }
@@ -155,41 +155,41 @@ func writePacket(f *os.File, packet []byte) error {
155155 return nil
156156}
157157
158- func getPacket (buf []byte ) ([]byte , error ) {
159- iph : = IOSPacketHeader {}
158+ func getPacket (buf []byte ) (iph IOSPacketHeader , packet []byte , err error ) {
159+ iph = IOSPacketHeader {}
160160 preader := bytes .NewReader (buf )
161161 struc .Unpack (preader , & iph )
162162
163163 // support ios 15 beta4
164164 if iph .HdrSize > PacketHeaderSize {
165165 buf := make ([]byte , iph .HdrSize - PacketHeaderSize )
166- _ , err : = io .ReadFull (preader , buf )
166+ _ , err = io .ReadFull (preader , buf )
167167 if err != nil {
168- return []byte {}, err
168+ return iph , []byte {}, err
169169 }
170170 }
171171
172172 // Only return specific packet
173173 if Pid > 0 {
174174 if iph .Pid != Pid && iph .Pid2 != Pid {
175- return []byte {}, nil
175+ return iph , []byte {}, nil
176176 }
177177 }
178178
179179 if ProcName != "" {
180180 if ! strings .HasPrefix (iph .ProcName , ProcName ) && ! strings .HasPrefix (iph .ProcName2 , ProcName ) {
181- return []byte {}, nil
181+ return iph , []byte {}, nil
182182 }
183183 }
184184
185185 //log.Info("IOSPacketHeader: ", iph.ToString())
186- packet , err : = ioutil .ReadAll (preader )
186+ packet , err = ioutil .ReadAll (preader )
187187 if err != nil {
188- return packet , err
188+ return iph , packet , err
189189 }
190190 if iph .FramePreLength == 0 {
191191 ext := []byte {0xbe , 0xfe , 0xbe , 0xfe , 0xbe , 0xfe , 0xbe , 0xfe , 0xbe , 0xfe , 0xbe , 0xfe , 0x08 , 0x00 }
192- return append (ext , packet ... ), nil
192+ return iph , append (ext , packet ... ), nil
193193 }
194- return packet , nil
194+ return iph , packet , nil
195195}
0 commit comments