ネットワークから raw パケットを受信してバイナリ ファイルに保存する C プログラムを実装しましたが、C はバイナリ ファイルを開くことができません。ターミナルを使用して開こうとしましたが、許可が拒否されました。バイナリ ファイルを開くにはどうすればよいですか?
int main()
{
int saddr_size , data_size;
struct sockaddr saddr;
gopromiscous();
unsigned char *buffer = (unsigned char *) malloc(1024);
logfile=fopen("sniff_data.bin","wb");
if(logfile==NULL)
{
printf("Unable to create sniff_data file.");
}
printf("\n Starting..\n");
int sock_raw = socket( AF_PACKET , SOCK_RAW , htons(ETH_P_ALL)) ;
setsockopt(sock_raw , SOL_SOCKET , SO_BINDTODEVICE , "eth0" , strlen("eth0")+ 1 );
if(sock_raw < 0)
{
//Print the error with proper message
perror("Socket Error");
return 1;
}
int count=30;
while(count>=0)
{
count--;
saddr_size = sizeof saddr;
//Receive a packet
data_size = recvfrom(sock_raw , buffer , 1024, 0 , &saddr , (socklen_t*)&saddr_size);
if(data_size <0 )
{
printf("Recvfrom error , failed to get packets\n");
return 1;
}
fwrite(buffer, data_size, 1, logfile);
//Now process the packet
ProcessPacket(buffer , data_size);
}
fclose(logfile);
close(sock_raw);
printf("\n");
printf(" Finished\n\n");
return 0;
}