close

Вход

Забыли?

вход по аккаунту

?

Отчет lab2

код для вставкиСкачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего профессионального образования
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ЯДЕРНЫЙ УНИВЕРСИТЕТ "МИФИ" Димитровградский инженерно-технологический институт - филиал НИЯУ МИФИ
Отчет по лабораторной работе №2
по дисциплине "Технологии программирования в сетях"
Выполнил: студент группы ВТ-51
Улейкин Е.Ю.
Проверил: ст. преподаватель кафедры ИТ
Аленин А. А.
Димитровград, 2012
Задание
1..Изучить раздел 4 "Работа с именами и адресами." из методического пособия "Программирование сокетов."
2. Разработать программу для случайного доступа к базе данных хостов по ключам - именам и адресам хостов с помощью функций gethostbyname() иgethostbyaddr(). Проверить её работу.
3. Аналогично п.2, но с использованием функций getaddrinfo() и getnameinfo() . Проверить её работу.
4. Разработать программу для получения информации из базы имен сетевых сервисов по его имени или номеру, соответственно с использованием функций getservbyname() и getservbyport(). Проверить её работу.
При сдаче лабораторной работы будет проверяться работа разработанных программ и назначение использованных функций.
Выполнение поставленного задания
Код программы:
include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
main (int argc, char **argv)
{
struct hostent *host;
in_addr_t ip;
char *c_ip;
host = gethostbyname(argv[1]);
if (host != NULL){
ip = *(int *)host->h_addr_list[0];
printf("%s -> %s\n",argv[1],inet_ntoa(ip));
}
else
printf("not found");
}
Результат работы программы:
vm:~# ./a.out vm
vm -> 127.0.1.1
Данная программа демонстрирует доступ к хосту по имени. Адрес хоста получаем с помощью функции gethostbyname().
Код программы:
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
main (int argc, char **argv)
{
struct hostent *host;
struct in_addr addr;
inet_aton(argv[1],&addr);
host= gethostbyaddr(&addr,sizeof(addr),AF_INET);
printf("%s\n",host->h_name);
}
Результат:
vm:~# gcc ex2.c
vm:~# ./a.out 127.0.0.1
localhost
Данная программа демонстрирует доступ к хосту по адресу. Доступ обеспечивает функция gethostbyaddr().
Код программы:
#include <stdio.h>
#include <netdb.h>
#include <arpa/inet.h>
main (int argc, char **argv){
struct addrinfo hints = {AI_CANONNAME,AF_INET,SOCK_STREAM,IPPROTO_TCP,0,NULL,NULL,NULL};
struct addrinfo *addr_res;
getaddrinfo(argv[1],"http",&hints,&addr_res);
do {
printf("IP:%s \n",inet_ntoa (((struct sockaddr_in *) addr_res->ai_addr)->sin_addr));
printf("PORT:%d \n",(((struct sockaddr_in *) addr_res->ai_addr)->sin_port));
} while ((addr_res = addr_res->ai_next) != NULL);
}
Результат:
vm:~# gcc ex3.c
vm:~# ./a.out vm
IP:127.0.1.1
PORT:20480
Код программы:
#include <stdio.h>
#include <netdb.h>
#include <arpa/inet.h>
main (int argc, char **argv){
struct sockaddr_in hints;
struct addrinfo *info;
char node[200];
char service[200];
hints.sin_family = AF_INET;
hints.sin_port = htons(0);
inet_aton(argv[1],&hints.sin_addr);
getnameinfo((struct sockaddr *) &hints, sizeof(hints), &node,sizeof(node),&service,sizeof(service),AI_CANONNAME);
printf("NODE: %s \n",node);
printf("SERVICE: %s \n",service);
}
Результат:
vm:~# gcc ex4.c
vm:~# ./a.out 127.0.0.1
NODE: localhost
SERVICE: 0
Следующие две программы демонстрируют получение информации из базы имен сетевых сервисов по его имени или номеру, соответственно с использованием функций getservbyname() и getservbyport(). Код программы:
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
main (int argc, char **argv)
{
struct servent *serv;
char *p;
int i = 0;
setservent(1);
if ( (serv = getservbyport (htons((in_port_t)atoi(argv[1])),NULL))!=NULL){
printf("Порт:%d\n", ntohs ((in_port_t)serv->s_port));
printf("Протокол:%s\n",serv->s_proto);
printf("Имя сервера:%s\n",serv->s_name);
printf("Псевдонимы: ");
while ((p = serv->s_aliases [i]) != NULL) {
printf ("%s\n", p);
i++;
}
}
printf("\n");
endservent();
}
Результат:
vm:~# gcc ex5.c
vm:~# ./a.out 21
Порт:21
Протокол:tcp
Имя сервера:ftp
Псевдонимы:
Код программы:
#include <stdio.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
main (int argc, char **argv){
struct servent *serv;
char *p;
int i;
setservent(1);
if ( (serv = getservbyname (argv[1],NULL))==NULL){
printf("Имя сервера:%s\n",serv->s_name);
printf("Порт:%d\n", ntohs ((in_port_t)serv->s_port));
printf("Протокол:%s\n",serv->s_proto);
}
endservent();
}
Результат:
vm:~# gcc ex6.c
vm:~# ./a.out ftp
Имя сервера: ftp
Порт: 21
Протокол: tcp
Документ
Категория
Рефераты
Просмотров
14
Размер файла
20 Кб
Теги
lab2, отчет
1/--страниц
Пожаловаться на содержимое документа