c - 如何将 ARP 绑定(bind)从文件获取到数组中

标签 c arp

我正在尝试将 Linux 中的 ARP 表获取到一个数组,代码如下。我总是在变量 ip 和 mac 中获取地址,但是当分配给数组时,它只是显示一些疯狂的数字。我做错了什么吗? (我不太擅长编程)

struct ARP_entry 
{
  char IPaddr;
  char MACaddr;
  char ARPstatus;
  int timec;
};

static struct ARP_entry ARP_table[ARP_table_vel];


void getARP()
{
  int i=0;
  const char filename[] = "/proc/net/arp";
  char ip[16], mac[18], output[128];
  FILE *file = fopen(filename, "r");
  if ( file )
  {
    char line [ BUFSIZ ];
    fgets(line, sizeof line, file);
    while ( fgets(line, sizeof line, file) )
    {
      char  a,b,c,d;
      if ( sscanf(line, "%s %s %s %s %s %s", &ip, &a, &b, &mac, &c, &d) < 10 )
        {
    if ( ARP_table_vel > i)
    {
      ARP_table[i].IPaddr = ip;
      ARP_table[i].MACaddr = mac;
          ARP_table[i].ARPstatus = STATUS_CON;
      i++;
    }
        }
    }
  }
  else
  {
    perror(filename);
  }

最佳答案

您需要修复结构并将 char 变量放入 char 数组中:

struct ARP_entry 
{
  char IPaddr[16];
  char MACaddr[18];
  char ARPstatus;
  int timec;
};

然后您需要对数据进行适当的复制,以便保留它们:

if ( ARP_table_vel > i)
    {
      snprintf(ARP_table[i].IPaddr, 16, "%s", ip);
      snprintf(ARP_table[i].MACaddr, 18, "%s", mac);
      ARP_table[i].ARPstatus = STATUS_CON;
      i++;
    }

最后,ARP 表有一个 header ,因此您需要丢弃第一行。

关于c - 如何将 ARP 绑定(bind)从文件获取到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6264313/

相关文章:

ip - 列出本地网络上的所有设备?

icmp - 设置 ICMP 与 POX Controller 匹配

c - 为什么arp回复没有发送?

c - 路由器上的 ARP 响应

c - 我如何在 Linux 上使用 C/C++ 执行 DNS 查找?

c - 将字符串存储在数组中

c - 如何在 C 中使用动态多维数组?

python - 如何通过Python正则表达式从arp输出中获取ip地址和mac地址?

c - 错误的 printf 类型仍然打印正确的值

c - 将结构写入二进制文件,从文件中读取,存储在缓冲区中,打印缓冲区