Это, безусловно, можно сделать на C.
Выполнение этого в Java будет зависеть от того, есть ли у вас доступ к библиотеке захвата пакетов для Java (предполагается, что вы хотите захватывать произвольные пакеты, а не только те, которые специально предназначены для вашего приложения).