- •Лабораторная работа №1 Изучение возможностей протокола tcp/ip при организации однократного и многократного обмена сообщениями
- •Часть 2:
- •Лабораторная работа № 2 Изучение возможностей протокола udp по передаче сообщений между клиентом и сервером
- •Лабораторная работа № 3 Получение сетевой информации с помощью протокола tcp/ip
- •2 Задание:
- •Лабораторная работа № 4 Изучение организации сетевого обмена гипертекстовыми файлами
- •Лабораторная работа № 5 Особенности протокола tcp/ip при посылке исполняемых файлов от клиента на удаленный сервер
Лабораторная работа № 3 Получение сетевой информации с помощью протокола tcp/ip
Цель работы: изучение работы протокола TCP/IP
Задание на выполнение работы: написать следующие программы:
Получение имени сервера по заданному IP-адресу
Получение IP –адреса по заданному имени сервера
Задание №1
Листинг программы
#define WIN
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#ifdef WIN
#include <windows.h>
#endif
//#define PORT_NUM 1050
void main(int argc, char *argv[])
{
#ifdef WIN
WORD wVersionRequested = MAKEWORD(1,1);
WSADATA wsaData;
#endif
struct hostent *host;
struct in_addr *myaddr;
char ip_address[256];
if(argc!=2)
{
printf("usage is 'getname ip_address' \n");
getch();
exit(1);
}
#ifdef WIN
WSAStartup(wVersionRequested, &wsaData);
#endif
strcpy (ip_address, argv[1]);
myaddr=(struct in_addr*)malloc(sizeof(struct in_addr));
myaddr->s_addr=inet_addr(ip_address);
printf("looking for host name ..'%s'", ip_address);
host = gethostbyaddr((char *) myaddr, 4 ,AF_INET);
if (host==NULL)
printf("Host name for '%s' could not be found \n",ip_address);
else
printf("Host name for '%s' is '%s' \n", ip_address, host->h_name);
#ifdef WIN
WSACleanup();
#endif
getch();
}
Рис.3.1 Нахождение имени хоста по ip адресу
2 Задание:
Листинг:
#define WIN
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#ifdef WIN
#include <windows.h>
#endif
void main(int argc, char *argv[])
{
#ifdef WIN
WORD wVersionRequested = MAKEWORD(1,1);
WSADATA wsaData;
#endif
struct hostent *host;
struct in_addr address;
char host_name[256];
char ip_address[256] ;
if(argc!=2)
{
printf("error!! \n");
getch();
exit(1);
}
#ifdef WIN
WSAStartup(wVersionRequested, &wsaData);
#endif
strcpy (host_name, argv[1]);
host = gethostbyname(host_name);
if (host==NULL)
printf("Host name for '%s' could not be found \n",ip_address);
else
{
memcpy(&address, host->h_addr, 4);
printf(" IP address for '%s' is %s \n", host_name, inet_ntoa(address));
}
#ifdef WIN
WSACleanup();
#endif
getch();
}
Рис.3.2 Нахождение ip адреса.
Контрольные вопросы:
Опишите порядок получения имени хоста по заданному IP адресу
Это делается при помощи команды gethostbyaddr() которая служит для получения указателя на структуру host.
Затем выполняется запрос по поиску имени хоста по IP.
Опишите порядок получения IP адреса по заданному имени хоста
Это делается при помощи команды gethostbyname() которая служит для получения указателя на структуру ip_address.
Затем выполняеться запрос по поиску IP по имени хоста.
В данном случае это – 317a-2.fit.rshu.ru
