0

以下に投稿されたコードを使用して、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);
  }
4

1 に答える 1

0

構造を修正し、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 テーブルにはヘッダーがあるため、最初の行を破棄する必要があります。

于 2011-06-07T11:31:40.943 に答える