いつもお世話になっております。
件名の事について質問があります。
現在ARPパケットを取得するプログラムを作成しています。
その際に自身のMACアドレスとIPアドレスを送りつける必要があるみたいなので
まず自身のMACアドレスを取得しようとしましたが上手くいきません。
具体的には、ioctlを使ってMACアドレスとを取得しようとするとEINVAL(22)が返ってきます。
環境
- Windows7 Professional x64(PC)
- Cygwin 2.0.1
- clang version 3.5.1
ソース
C
1 2#include <stdio.h> 3 4#include <string.h> 5 6#include <sys/types.h> 7#include <sys/socket.h> 8#include <sys/ioctl.h> 9#include <netinet/in.h> 10#include <net/if.h> 11#include <unistd.h> // for close 12#include <errno.h> 13 14int main(){ 15 16 int fd; 17 struct ifreq ifr; 18 long lReturn = 0; 19 if((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0){ 20 printf("socket errno=%d\n",errno); 21 return 0; 22 } 23 24 ifr.ifr_addr.sa_family = AF_INET; 25 strncpy(ifr.ifr_name, "eth0", IFNAMSIZ-1); 26 27 if((lReturn= ioctl(fd, SIOCGIFHWADDR, &ifr)) < 0){ 28 printf("ioctl errno=%d\n",errno); 29 printf("SIOCGIFHWADDR=%lu\n", SIOCGIFHWADDR); 30 printf("ifr pointer=%p\n", &ifr); 31 }else{ 32 printf("%.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", 33 (unsigned char)ifr.ifr_hwaddr.sa_data[0], 34 (unsigned char)ifr.ifr_hwaddr.sa_data[1], 35 (unsigned char)ifr.ifr_hwaddr.sa_data[2], 36 (unsigned char)ifr.ifr_hwaddr.sa_data[3], 37 (unsigned char)ifr.ifr_hwaddr.sa_data[4], 38 (unsigned char)ifr.ifr_hwaddr.sa_data[5]); 39 } 40 close(fd); 41 return 0; 42}
[結果]
ioctl errno=22 SIOCGIFHWADDR=2152231785 ifr pointer=0x28cbf0
エラーの詳細を見ると第二引数と第三引数がおかしいみたいですが、
変な所はなさそうですが。
よろしくお願いいたします。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/08 14:57