Программа на языке си
Мы вводим в командную строку ip адрес и маску подсети(Значение маски может быть в 16 виде ,в 8 виде, в 2 виде в зависимости от аргументов командной строки) .Вывести номер сети и номер узла.Пожалуйста помогите! Заранее благодарен.
ДополненНеправильно записал задание. Нужно вывести номер сети, номер узла, и маску в 2,10,16 видах.
По дате
По рейтингу
Есть стандартные функции для преобразования адресов IPv4, программа ниже использует их. В руководстве сказано: "components of the dotted address can be specified in decimal, octal (with a leading 0), or hexadecimal, with a leading 0X)"
Пример работы:
12345
./app 127.0.0.1 255.0.0.0
ip: 127.0.0.1
mask: 255.0.0.0
host addr: 0.0.0.1
net addr: 127.0.0.0
Исходный код:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
#include <stdio.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>
int main( int argc, char* argv[] )
{
// IP адрес и маска сети, которые вводит пользователь
struct in_addr ip;
struct in_addr mask;
// Адрес хоста внутри сети
struct in_addr host_addr;
// Адрес сети
struct in_addr net_addr;
if( argc > 2)
{
if( inet_aton(argv[1], &ip) )
{
if( inet_aton(argv[2], &mask) )
{
// Успешный ввод
printf("ip: %s\n", inet_ntoa(ip));
printf("mask: %s\n", inet_ntoa(mask));
// Вычислим адрес хоста и адрес сети
host_addr.s_addr = ip.s_addr & ~mask.s_addr;
printf("host addr: %s\n",inet_ntoa(host_addr));
net_addr.s_addr = ip.s_addr & mask.s_addr;
printf("net addr: %s\n",inet_ntoa(net_addr));
}
else
{
fprintf( stderr, "Ошибка разбора маски сети\n" );
}
}
else
{
fprintf( stderr, "Ошибка разбора IP адреса\n" );
}
}
else
{
printf("Использование:\n");
printf("%s IPv4_address IPv4_netmask\n", argv[0]);
}
return 0;
}