gpt4 book ai didi

c - 如何打开使用 C 程序创建的二进制文件?

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:27 24 4
gpt4 key购买 nike

我已经实现了一个 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;
}

最佳答案

假设您在 Linux 上并且二进制文件名为"file"。

首先,检查文件的权限:

ls -l file

如果你能读懂它,权限应该看起来像这样:

-rw-r--r--

前三个字母是用户的权限,后面三个是组的权限,最后三个是other。如果有所有“r”(或只有您需要的),您就可以开始了。

如果没有,您可以授予自己读取相关文件的权限:

chmod +r file

要真正读取文件,您可以尝试使用像 vim 这样的编辑器或像 cat 这样的命令:

cat -v file

(将 -v 添加到 cat 以避免弄乱终端,在这种情况下,您可以键入 reset)。

这是在 C 中读取(和输出)文件的一种方法:

ma​​in.c:

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

int main ()
{
char *buffer;
struct stat s;

int fd = open ("file", O_RDONLY);
if (fd < 0) {
return EXIT_FAILURE;
}
fstat (fd, &s);

buffer = mmap (0, s.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if (buffer != (void *) -1) {
fwrite (buffer, s.st_size, 1, stdout);
munmap (buffer, s.st_size);
}

close (fd);
return EXIT_SUCCESS;
}

(示例来自 http://rosettacode.org/wiki/Read_entire_file#C)

编译:

gcc -O2 main.c -o main

然后通过执行程序读取文件:

./main

要以二进制格式(1 和 0)查看文件,您可以使用此命令:

xxd -b file

关于c - 如何打开使用 C 程序创建的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com