2
A
回答
3
與Michael Foukarakis我能夠顯示各種接口在同一臺機器上的IP地址輸入:
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netdb.h>
#include <ifaddrs.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
struct ifaddrs *ifaddr, *ifa;
int family, s;
char host[NI_MAXHOST];
if (getifaddrs(&ifaddr) == -1) {
perror("getifaddrs");
exit(EXIT_FAILURE);
}
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
family = ifa->ifa_addr->sa_family;
if (family == AF_INET) {
s = getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_in),
host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
if (s != 0) {
printf("getnameinfo() failed: %s\n", gai_strerror(s));
exit(EXIT_FAILURE);
}
printf("<Interface>: %s \t <Address> %s\n", ifa->ifa_name, host);
}
}
return 0;
}
10
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
int main()
{
int fd;
struct ifreq ifr;
fd = socket(AF_INET, SOCK_DGRAM, 0);
ifr.ifr_addr.sa_family = AF_INET;
snprintf(ifr.ifr_name, IFNAMSIZ, "eth0");
ioctl(fd, SIOCGIFADDR, &ifr);
/* and more importantly */
printf("%s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
close(fd);
}
如果要列舉所有的接口,看看在getifaddrs()
功能 - 如果你是在Linux上。
-1
獲取「/ proc/net/dev」中的所有接口。注意:它不能僅使用ioctl獲取所有接口。
#define PROC_NETDEV "/proc/net/dev"
fp = fopen(PROC_NETDEV, "r");
while (NULL != fgets(buf, sizeof buf, fp)) {
s = strchr(buf, ':');
*s = '\0';
s = buf;
// Filter all space ' ' here
got one interface name here, continue for others
}
fclose(fp);
然後獲得使用地址的ioctl():
struct ifreq ifr;
struct ifreq ifr_copy;
struct sockaddr_in *sin;
for each interface name {
strncpy(ifr.ifr_name, ifi->name, sizeof(ifr.ifr_name) - 1);
ifr_copy = ifr;
ioctl(fd, SIOCGIFFLAGS, &ifr_copy);
ifi->flags = ifr_copy.ifr_flags;
ioctl(fd, SIOCGIFADDR, &ifr_copy);
sin = (struct sockaddr_in*)&ifr_copy.ifr_addr;
ifi->addr = allocating address memory here
bzero(ifi->addr, sizeof *ifi->addr);
*(struct sockaddr_in*)ifi->addr = *sin;
/* Here also you could get netmask and hwaddr. */
}
+0
看到其他職位如何打開「fd」 – Test 2009-10-15 06:07:35
相關問題
- 1. Perl代碼獲取ip地址
- 2. 獲取IP地址C#
- 3. 如何在C#代碼獲取IP地址
- 4. 獲取IP地址
- 5. 獲取IP地址
- 6. 獲取IP地址
- 7. 獲取Ip地址的位置C#,asp.net
- 8. 獲取IP地址的mac地址
- 9. 獲取本地IP地址
- 10. 如何從Firefox擴展代碼獲取本地IP地址
- 11. 獲取我的IP地址
- 12. 獲取ip地址的值
- 13. C#:從域名獲取IP地址?
- 14. C#中獲取LAN活動IP地址
- 15. 在C#中獲取IP地址
- 16. 無法獲取在ip地址mac地址上運行的代碼
- 17. 如何使用.NET代碼獲取用戶的IP地址?
- 18. 獲取主機的MAC地址和IP地址 - C++
- 19. C#將獲取的地址解析爲IP地址
- 20. 如何使用C#獲取IP地址的物理(MAC)地址?
- 21. 從arp獲取IP地址
- 22. 如何獲取IP地址?
- 23. 在vb.net獲取IP地址
- 24. 從bssid獲取IP地址
- 25. 如何獲取IP地址?
- 26. 獲取多個IP地址
- 27. JAVA獲取IP地址
- 28. 獲取ip地址與XcvData
- 29. 獲取全球IP地址
家庭作業?你到目前爲止有什麼? – GManNickG 2009-10-15 05:54:14
您必須注意,在使用'ifconfig'的生產代碼中不是最糟糕的解決方案。 – 2009-10-15 06:15:34
不要擔心這不是我的家庭作業難題....我越來越多地參與到一些在C中的嚴重編程,結果試圖修復我的應用程序中的一些缺失的鏈接.... – codingfreak 2009-10-15 07:22:13