Problema com a abstração dos Sockets!

Estou fazendo um trabalho para faculdade e para este devo desenvolver um software usando Sockets com um protocolo UDP.

O problema é que o servidor que devo implementar precisa identificar ruidos na rede (que serão simulados pelo cliente) e devo responder aos mesmos com pacotes ICMP sendo que estes devem ser manipulados manualmente.

Assim a minha pergunta é como eu posso acessar o checksum do cabeçalho de um pacote UDP para verificar erros na rede, e como eu criar pacotes ICMP?

Posso estar enganado ou sei lá, mas acho que os Sockets disponíveis no JRE não deixam você fazer esse tipo de implementação. Você precisaria de “raw sockets”, pelo que eu vi em algum outro tópico ou fórum.