Code:
#include <stdio.h>
typedef struct Packet {
int packet_length;
struct {int year, month, day;} date;
struct {int hour, minute, second, microseconds;} time;
char src[20], dst[20];
} Packet;
int main() {
char s[] =
"Packet length: 64 [Bytes], Arrival time: 2018-02-21 12:43:36.877229\n"
"Ethernet II Layer, Src: 00:04:96:9a:d1:00, Dst: 4c:72:b9:d1:a5:9c\n"
"IPv4 Layer, Src: 10.221.0.69, Dst: 10.221.79.19\n"
"TCP Layer, [ACK], Src port: 54671, Dst port: 5900\n"
"Payload Layer, Data length: 10 [Bytes], Data: 310000780438\n";
Packet p;
sscanf(s, "Packet length: %d [Bytes], Arrival time: %d-%d-%d %d:%d:%d.%d\n"
"Ethernet II Layer, Src: %[^,], Dst: %s\n",
&p.packet_length, &p.date.year, &p.date.month, &p.date.day,
&p.time.hour, &p.time.minute, &p.time.second, &p.time.microseconds,
p.src, p.dst);
printf("%d\n%d %d %d\n%d %d %d %d\n%s\n%s\n",
p.packet_length, p.date.year, p.date.month, p.date.day,
p.time.hour, p.time.minute, p.time.second, p.time.microseconds,
p.src, p.dst);
return 0;
}
Note that I added a seemingly-missing comma after "[Bytes]" in the last line.