определить первый и последний сегмент
Я не очень понял, что вы называете "первый и последний сегмент"? Первый входящий сегмент содержит SYN в TCP-флагах, последний содержит FIN или RST.
получаются куски,которые мне не нужны, а нужен конечный пакет в виде TCP данных
Читайте RFC по IPv4 (
https://www.ietf.org/rfc/rfc791.txt ), часть Fragmentation and Reassembly. Коротко -- вам нужно выловить все IP-фрагменты TCP-сегмента (IP-пакеты с одинаковыми наборами {source address, destination address, protocol, identification}) и поместить их данные согласно значению в поле Fragment offset в буфер, где вы собираете TCP-сегмент. Приём сегмента заканчивается по истечении таймаута сборки или по приёме всех фрагментов сегмента.