導航:首頁 > IDC知識 > c根據域名獲取ip

c根據域名獲取ip

發布時間:2020-10-30 02:30:07

1、C語言中 如何實現域名轉換為IP 高分

char cmd[100];
char url[]="www.BAIDU.COM";
char tmp_file_name[]="tmp.txt";
FILE *fp;
sprintf(cmd,"nslookup %s > %s",url,tmp_file_name);
system(cmd);
if ( (fp=fopen(tmp_file_name,"r"))==NULL ){
printf("can not open %s\n",tmp_file_name);
exit(0);
}
// 然後按行讀。跳過前兩行。找後面的行。
// 如果某行第一個字元串是Addresses:
// 第二個字元串就是 IP
tmp.txt:
Server: aaaaaaaaaa
Address: nnn.nnn.nnn.nnn

Non-authoritative answer:
Name: www.a.shifen.COM
Addresses: 119.75.213.61, 119.75.216.30
Aliases: www.BAIDU.COM

2、請問 c語言怎樣獲取計算機ip地址啊

是自己的公網地址吧
一個簡單的方法訪問一個ip地址查詢的網站然後匹配出自己的ip地址就可以了

3、C語言如何實現IP地址查詢系統

C語言如何實現IP地址查詢系統
參考如下:

void GetNameAndIp()
{
struct hostent *host;
struct in_addr *ptr;
DWORD dwScope = RESOURCE_CONTEXT;
NETRESOURCE *NetResource = NULL;
HANDLE hEnum;
WNetOpenEnum(dwScope, NULL, NULL, NULL, &hEnum);
WSADATA wsaData;
WSAStartup(MAKEWORD(1, 1), &wsaData);
if (hEnum)
{
DWORD Count = 0xFFFFFFFF;
DWORD BufferSize = 10240;
LPVOID Buffer = new char[10240];
WNetEnumResource(hEnum, &Count, Buffer, &BufferSize);
NetResource = (NETRESOURCE*)Buffer;
char szHostName[200];
for (unsigned int i = 0; i < BufferSize / sizeof(NETRESOURCE); i++, NetResource++)
{
if (NetResource->dwUsage == RESOURCEUSAGE_CONTAINER && NetResource->dwType == RESOURCETYPE_ANY)
{
if (NetResource->lpRemoteName)
{
CString strFullName = NetResource->lpRemoteName;
if (0 == strFullName.Left(2).Compare(_T("\\")))
strFullName = strFullName.Right(strFullName.GetLength() - 2);
gethostname(szHostName, strlen(szHostName));
USES_CONVERSION;
char *pchar = T2A(strFullName);
host = gethostbyname(pchar);
if (host == NULL) continue;
ptr = (struct in_addr *) host->h_addr_list[0];
string str = "";
for (int n = 0; n<4; n++)
{
CString addr;
if (n > 0)
{
str += ".";
}
int value = (unsigned int)((unsigned char*)host->h_addr_list[0])[n];
char p[20];
sprintf(p, "%d", value);
str.append(p);
}
std::cout <<"IP:"<< str <<" Name:"<<host->h_name<< std::endl;
}
}
}
delete Buffer;
WNetCloseEnum(hEnum);
}
WSACleanup();
}

4、求一C語言大神在線幫我寫一段程序『』請編寫程序實現根據主機名獲得IP地址信息,並將信息保存在文件中『』

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <netdb.h>
using namespace std;

const char* dns_parse(const char* host) {
struct addrinfo hints;
struct addrinfo *result = NULL;
struct addrinfo *rp = NULL;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC; /* Allow any */
hints.ai_socktype = 0; /* Any */
hints.ai_flags = 0; /* No flags */
hints.ai_protocol = 0; /* Any protocol */

int error = getaddrinfo(host, NULL, &hints, &result);
if (error != 0) {
if (result) {
freeaddrinfo(result);
}
return "";
}

const char* ip = "";
const char* ipv6 = "";
const char* ipv4 = "";
char tmp[INET6_ADDRSTRLEN * 2] = {0};
for (rp = result; rp != NULL; rp = rp->ai_next) {
if (rp->ai_family == AF_INET && strlen(ipv4) == 0) {
const char *ret = inet_ntop(rp->ai_family,
&((struct sockaddr_in*)rp->ai_addr)->sin_addr,
tmp, (INET6_ADDRSTRLEN * 2));
if (ret != NULL) {
ipv4 = ret;
}
} else if (rp->ai_family == AF_INET6 && strlen(ipv6) == 0) {
const char *ret = inet_ntop(rp->ai_family,
&((struct sockaddr_in6*)rp->ai_addr)->sin6_addr,
tmp, (INET6_ADDRSTRLEN * 2));
if (ret != NULL) {
ipv6 = ret;
}
}
}
if (result) {
freeaddrinfo(result); // Not needed anymore
}

if (strlen(ipv6) > 0) {
ip = ipv6;
} else if (strlen(ipv4) > 0) {
ip = ipv4;
} else {
return "";
}
return ip;
}

void save_to_file(char* data, int len, const char* file_path) {
FILE *fp = fopen(file_path, "wb");
if (!fp) {
return;
}
fwrite(data, sizeof(char), len, fp);
fclose(fp);
}

int main() {
const char* ip = dns_parse("www.baidu.com");
printf("%s\n", ip);
int len = strlen(ip);
char* data = (char*)malloc(len + 1);
memcpy(data, ip, len);
data[len] = '\0';
save_to_file(data, len + 1, "a.txt");
free(data);
return 0;
}

5、只用C語言,怎麼通過域名得到IP地址

?

6、用C語言編寫一個得到域名的IP的程序,得到的IP放入指定的變數中

我可以得出IP,但是不能把IP賦給變數,本人菜鳥一隻,學C不到兩個月,所以只能做到這了,代碼給樓主
#include<stdio.h>
#include<stdlib.h>
void main()
{
char str[50],str1[40];
printf("請輸入域名:");
gets(str1);
sprintf(str,"ping %s",str1);
system(str);
}
滿意就給分,不滿意就不用了

7、用C語言編寫一個得到域名的IP的程序

||輸入 域名
結果的 4小節整數 存 int d1,d2,d3,d4 變數中。

#include <stdio.h>
#include <stdlib.h>

void main()
{
char ym[80]="www.baidu.com";
FILE *fp;
char cmd[120];
char nameout[]="tmp_ping.txt"; // 臨時文件
char str3[32];
int i,len,d1,d2,d3,d4;

printf("Enter domain address\n");
scanf("%s",&ym[0]);
sprintf(cmd,"ping %s -n 1 > %s\0",ym,nameout);
system(cmd);
fp = fopen(nameout,"r");
fscanf(fp,"%*s %*s %s",&str3[0]);
fclose(fp);
len = strlen(str3);
for (i=0;i<len;i++) if ( str3[i] == '[' || str3[i] == ']'|| str3[i] == '.') str3[i] = ' ';
sscanf(str3, "%d %d %d %d",&d1,&d2,&d3,&d4);
printf("ip=%d.%d.%d.%d\n",d1,d2,d3,d4);

sprintf(cmd,"ERASE /F /Q %s\0",nameout); // 刪去臨時文件
system(cmd);
getchar();
}

程序未考慮錯誤域名和無IP返回的域名,你可以自己補充幾行處理程序。

8、獲取ip地址對應的mac地址,c/c++編程實現,linux下

/**

* @send_arp.c

* @This software is intended to be used as a example to show how to send and receive arp request with Linux * PF_PACKET interface

* @Author:xuelei

**/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <errno.h>

#include <unistd.h>

#include <netdb.h>

#include <sys/socket.h>

#include <sys/un.h>

#include <sys/ioctl.h>

#include <netinet/in.h>

#include <net/if.h>

#include <sys/types.h>

#include <asm/types.h>

#include <features.h> /* 需要裡面的 glibc 版本號 */

#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1

        #include <netpacket/packet.h>

        #include <net/ethernet.h> /* 鏈路層(L2)協議 */

#else

        #include <asm/types.h>

        #include <linux/if_packet.h>

        #include <linux/if_ether.h> /* 鏈路層協議 */

#endif

#include <netinet/if_ether.h>


#define INLEN 4

#define MAC_BCAST_ADDR  (uint8_t *) "xffxffxffxffxffxff"


void usage_quit(char *arg0);

int get_ifi(char *dev, char *mac, int macln, struct in_addr *lc_addr, int ipln);

void prmac(u_char *ptr);


int main(int argc, char **argv)

{

        if(argc != 2)

                usage_quit(argv[0]);


        int fd, salen, n;

        u_char *mac;

        char recv_buf[120], rep_addr[16];

        struct in_addr lc_addr, req_addr;

        struct sockaddr_ll reqsa, repsa;

        struct arp_pkt {

                struct ether_header eh;

                struct ether_arp ea;

                u_char padding[18];

        } req;


        bzero(&reqsa, sizeof(reqsa));

        reqsa.sll_family = PF_PACKET;

        reqsa.sll_ifindex = if_nametoindex("eth0");


        if((fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ARP))) < 0) {

                perror("Socket error");

                exit(1);

        }


        mac = (char *)malloc(ETH_ALEN);

        bzero(&req, sizeof(req));


        if(get_ifi("eth0", mac, ETH_ALEN, &lc_addr, INLEN)) {

                fprintf(stderr, "Error: Get host』s information failed ");

                exit(0);

        }

        printf("        Host MAC is: %02x:%02x:%02x:%02x:%02x:%02x ",*mac,*(mac+1),*(mac+2),*(mac+3),*(mac+4),*(mac+5));

         printf("       Host IP is: %s ", inet_ntop(AF_INET, &lc_addr, rep_addr, 1024));

        /* 填寫乙太網頭部*/

        memcpy(req.eh.ether_dhost, MAC_BCAST_ADDR, ETH_ALEN);

        memcpy(req.eh.ether_shost, mac, ETH_ALEN);

        req.eh.ether_type = htons(ETHERTYPE_ARP);


        /* 填寫arp數據 */

        req.ea.arp_hrd = htons(ARPHRD_ETHER);

        req.ea.arp_pro = htons(ETHERTYPE_IP);

        req.ea.arp_hln = ETH_ALEN;

        req.ea.arp_pln = INLEN;

        req.ea.arp_op = htons(ARPOP_REQUEST);

        memcpy(req.ea.arp_sha, mac, ETH_ALEN);

        memcpy(req.ea.arp_spa, &lc_addr, INLEN);

        inet_aton(argv[1], req.ea.arp_tpa);


        bzero(recv_buf, sizeof(recv_buf));

        bzero(&repsa, sizeof(repsa));

        salen = sizeof(struct sockaddr_ll);


        if((n = sendto(fd, &req, sizeof(req), 0, (struct sockaddr *)&reqsa, sizeof(reqsa))) <= 0) {

                perror("Sendto error");

                exit(1);

        }

        printf("Broadcast arp request of %s, %d bytes be sent ", argv[1], n);
        while(1) {

                if((n = recvfrom(fd, recv_buf, sizeof(req), 0, (struct sockaddr *)&repsa, &salen)) <= 0) {

                        perror("Recvfrom error");

                        exit(1);

                }

                if(ntohs(*(__be16 *)(recv_buf + 20))==2 && !memcmp(req.ea.arp_tpa, recv_buf + 28, 4)) {

                        printf("Response from %s, %d bytes received ", argv[1], n);

                        printf("        Peer IP is: %s ", inet_ntop(AF_INET, (struct in_addr *)(recv_buf + 28), rep_addr, 1024));

                        prmac( (u_char *)(recv_buf + 22) ); //prmac( (u_char *)(recv_buf + 6) );

                        break;

                }

                else

                    {

                    printf("Have recive data ");

                    break;

                    }

        }


        free(mac);

}


int get_ifi(char *dev, char * mac, int macln, struct in_addr *lc_addr, int ipln)

{

        int reqfd, n;

        struct ifreq macreq;


        reqfd = socket(AF_INET, SOCK_DGRAM, 0);

        strcpy(macreq.ifr_name, dev);


        /* 獲取本地介面MAC地址*/

        if(ioctl(reqfd, SIOCGIFHWADDR, &macreq) != 0)

                return 1;

        memcpy(mac, macreq.ifr_hwaddr.sa_data, macln);


        /* 獲取本地介面IP地址*/

        if(ioctl(reqfd, SIOCGIFADDR, &macreq) != 0)

                return 1;

        memcpy(lc_addr, &((struct sockaddr_in *)(&macreq.ifr_addr))->sin_addr, ipln);


        return 0;

}


void prmac(u_char *ptr)

{

        printf("        Peer MAC is: %02x:%02x:%02x:%02x:%02x:%02x ",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));

}


void usage_quit(char *arg0)

{

        fprintf(stderr, "Usage: %s <query_IP> ", arg0);

        exit(1);

}

與c根據域名獲取ip相關的知識