作者 主題: 如何在linux下利用C取得本機的IP??  (閱讀 8053 次)

0 會員 與 1 訪客 正在閱讀本文。

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
各位高手~
如何在linux下利用C取得本機的IP??
« 上次編輯: 2009-10-16 09:12 由 NARs »

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
回覆: 如何利用C取得本機的IP??
« 回覆 #1 於: 2009-10-16 00:37 »
不同作業系統有不同的寫法喔....

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
回覆: 如何利用C取得本機的IP??
« 回覆 #2 於: 2009-10-16 09:11 »
Linux作業系統

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
回覆: 如何在linux下利用C取得本機的IP??
« 回覆 #3 於: 2009-10-16 09:35 »
我記得討論版上有,不過找不太到最直接的
所以把庫存丟上來:
代碼: [選擇]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/if.h>

int main(int argc, char *argv[])
{
 int inet_sock;
 struct ifreq ifr;
 struct sockaddr_in *device_data;

 inet_sock = socket(AF_INET, SOCK_DGRAM, 0);
 strcpy(ifr.ifr_name, "eth0");//裝置名稱

 if (ioctl(inet_sock, SIOCGIFADDR, &ifr) < 0)
   {
     perror("ioctl");
   }
 else
  {
    device_data=(struct sockaddr_in*)&(ifr.ifr_addr);
    printf("Current IP = %s\n", inet_ntoa(device_data->sin_addr));
  }

 return 0 ;
}

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
回覆: 如何在linux下利用C取得本機的IP??
« 回覆 #4 於: 2009-10-16 09:43 »
樓上高手~~
我執行你的程式後,如果如下
代碼: [選擇]
ioctl: No such device
並沒有取得本機IP

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
回覆: 如何在linux下利用C取得本機的IP??
« 回覆 #5 於: 2009-10-16 09:50 »
樓上高手~~
我執行你的程式後,如果如下
代碼: [選擇]
ioctl: No such device
並沒有取得本機IP
請按自己的環境去核對這行:
代碼: [選擇]
strcpy(ifr.ifr_name, "eth0")
對照一下 ifconfig 的輸出結果

NARs

  • 活潑的大學生
  • ***
  • 文章數: 227
    • 檢視個人資料
回覆: 如何在linux下利用C取得本機的IP??
« 回覆 #6 於: 2009-10-16 09:55 »
樓上高手~
對照環境更改網卡,就可以取得IP.
但是這樣的方式有點不便,若是給別人執行的話,如果網卡設定的環境不同,就無法取得。

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
回覆: 如何在linux下利用C取得本機的IP??
« 回覆 #7 於: 2009-10-16 10:03 »
樓上高手~
對照環境更改網卡,就可以取得IP.
但是這樣的方式有點不便,若是給別人執行的話,如果網卡設定的環境不同,就無法取得。
這不是什麼大問題吧,補一個輸入介面讓使用者填寫不就解決乎?

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
回覆: 如何在linux下利用C取得本機的IP??
« 回覆 #8 於: 2009-12-07 17:54 »
是不是要這個?
http://phorum.study-area.org/index.php/topic,44162.msg221999.html#msg221999

不過現在來答很像有點LAG了 :P


程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼