2012-04-02 5 views

答えて

0

は、なぜあなたは、あなたのCコード内殻にifconfigコマンドコマンドを呼び出すの線に沿って何かをしませんコマンドを使用してデバイスを管理します。 man ifconfigを実行して、構造の仕方を確認してください。ifconfigは、このインターフェースで必要な作業を管理するようにリクエストしています。

低レベルにする必要がある場合は、単純にrawソケットを開いて操作したいイーサネットデバイスのインデックスを割り当ててから、ioctl() '必要に応じて設定するには、S:

if ((fd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW)) == -1) { 
    perror("socket"); 
} 

struct ifreq req; 
strncpy(req.ifr_name, "eth0", IFNAMSIZ-1); 
if (ioctl(fd, SIOCGIFINDEX, &ifreq) < 0) 
    perror("SIOCGIFINDEX"); 

その後、あなたはeth0をにあなたのハンドルを持っている...

+0

を試してみましたが、彼はソケットを望んでいないと言いました... – littleadv

+0

合意しました...しかし、ここではファイル記述子を使用することに対する嫌悪感は分かりません...とにかくコードの最初のスニペット(Sansソケットの実装)彼はすべて行う必要があります。 –

+0

合意した、OPは本当に質問に答えるのに十分な情報を共有したくないようです... – littleadv

0

はい、適切なioctlコールによってネットワークインターフェイスドライバに直接話すことができます。詳細については、ドライバのAPIリファレンスを参照してください。一部のOSは、独自のAPIを介してアクセスすることもできます(例えば、this questionを参照)。これは、ファイルディスクリプタを設定する必要がなくなりますが、あなたがすることができます

system("ifconfig eth0 ..."); 

+0

[OK]をしかし、ioctlの中で、私はファイルディスクリプタを送信します。 fdは私が使うはずのソケットがない? – user1307697

+0

@ user1307697あなたは、あなたが使用しているオペレーティングシステムを少なくとも私たちに教えなければ誰もあなたに答えることができないことを認識しています。まず/ dev/eth0を試してください。 – littleadv

+0

私は申し訳ありません...私はlinux mintを使用しています – user1307697

関連する問題