pcap を使用してパケットをキャプチャし、キャプチャしたパケットを別のホストに送信したいのですが、ソース コードのスニペットは次のようになります。
for(;;){
pcap_packet = pcap_next(pcap_handler, &pcap_header);
if(pcap_packet !=NULL)
printf("capture a packet with length of %d\n", pcap_header.len);
// send the packet as payload to the sender, excluding the Ethernet Header
n = send(sd_proxy, pcap_packet+ETHERNET_HDR_LEN, pcap_header.len-ETHERNET_HDR_LEN, 0);
if(n<0){
shutdown(connfd, SHUT_RDWR);
close(connfd);
break;
} new
}
基本的に、ソケットsd_proxyが他のホストとのTCP接続を確立したら、プログラムがpcap_nextによってブロックされるようにします。他のホストがアクティブなTCPクローズを開始した場合、このアクティブなクローズを検出したいと思います。理想的には、aselect
と aを使用する必要がありますn=recv(rd_fd, ...)
。他のホストがアクティブ クローズを開始し、select
何かがあることに気づき、 rd_fd
「n=0」かどうかを確認します。ただし、pcap では、select は pcap と連携できません。
どうやって私の仕事を終わらせるの?ありがとう!