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地址查詢系統
參考如下:
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, ¯eq) != 0)
return 1;
memcpy(mac, macreq.ifr_hwaddr.sa_data, macln);
/* 獲取本地介面IP地址*/
if(ioctl(reqfd, SIOCGIFADDR, ¯eq) != 0)
return 1;
memcpy(lc_addr, &((struct sockaddr_in *)(¯eq.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);
}