¿Cómo se obtiene el paquete TCP sin procesar en C #?

Quiero recibir un paquete TCP sin procesar y luego enviarlo de vuelta con la misma carga de trabajo.

Debería verse algo como esto:

void OnPacketReceived(TcpPacket p)
{
    byte [] body = p.GetBody();
}

NOTA: Necesito el paquete TCP y no el marco Ethernet.