D>ip заголовок взят здесь, первые 12 байт я не использую поэтому
Вы заголовок взяли, а читать не стали

. Если бы прочли, то узнали, что поле, обозначенное в этой доке как Option + Padding, необязательно должно присуствовать в ip пакете. По факту, его очень редко используют и в весьма специфичных случаях.
TC>>У меня есть подозрение, что вы за ip пакет приняли ARP — смотрите на тип эзернет фрейма ( 0x800 — ip, 0x806 — arp )
D>Если пинг есть, тип кадра соответствет ip — 0x800, а вот когда пинга нет тип имеет загадочное число 0x1544
1544 — это ведь наверное десятичное число? Которое в hex выглядит как 0x608. Если вспомнить, что сетевые протоколы имеют отличный от платформы i386 порядок байт, то это число будет 0x806, что соответствует ARP протоколу.
Хорош нам ребусы загадывать. Нужно доки читать. На крайняк, поставить сниффер вроде wireshark и посмотреть на живой сетевой трафик.