Я бы посоветовал использовать libpcap и libnet - это переносимее
Вот пример программки: она пишет в файл формата pcap TCP-пакеты, так, как будто ими обменивались 2 хоста в сети. Результирующий файл открывается в ethereal.
http://webfile.ru/1223826
только чур над кодом не ржать :))