C как получить ip адрес компьютера
Перейти к содержимому

C как получить ip адрес компьютера

  • автор:

Poccия

  • Домашняя страница
  • Poccия

Часто задаваемые вопросы и устранение неполадок

Главная страница PT-P750W
Часто задаваемые вопросы и устранение неполадок
Руководства
Расходные материалы и дополнительные компоненты
Поддерживаемые операционные системы
Технические характеристики

Часто задаваемые вопросы и устранение неполадок

PT-P750W

Дата: 24.11.2022 Номер: faqp00100014_000

Как узнать IP-адреса компьютера и принтера?

Чтобы проверить IP-адреса компьютера и принтера, выполните следующие действия.

Как проверить IP-адрес компьютера:

Для Windows:

    Windows 11:
    Нажмите меню [Start] (Пуск) — [All apps] (Все приложения) — [Windows Tools] (Инструменты Windows) — [Control Panel] (Панель управления).

Для Mac:

Убедитесь, что указана маска подсети «255.255.255.0».
Если указана другая маска подсети, обратитесь к администратору сети для устранения проблемы. (В таком случае данные инструкции не применимы для вашей сети.)

Как проверить IP-адрес принтера:

Проверить IP-адрес можно двумя способами:
либо проверив данные в окне Параметры подключения утилиты Инструмент настройки принтера, либо распечатав на принтере отчет о конфигурации.

  • Подробнее о проверке настроек в окне Параметры подключения см. в разделе «Использование окна «Параметры подключения» (для Windows)».
  • Подробнее о том, как напечатать на принтере отчет о конфигурации, см. в разделе «Можно ли распечатать настройки принтера?».

Связанные вопросы

  • Не удается подключить устройство к беспроводной сети
  • Где найти сетевые настройки принтера, такие как IP-адрес?

Получить IP-адреса всех компьютеров в локальной сети

в общем можно както получить айпишники всех компов в сети? и вообще как реализовать связь между двумя компами, ну например у меня приложение через которое мне нужно отправить какоето сообщение с одного компа на другой, что то типо аськи только немного не то. можно так сделать?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

IP адреса всех компьютеров в сети
Всем привет) Вопрос собственно в названии: Как найти IP-адреса компьютеров в (локальной, хотя.

Отображение всех компьютеров в локальной сети
Добрый вечер, пытаюсь разобраться в отображении компьютеров в сети. Смотрела некоторые исходники.

Получить список компьютеров в локальной сети
Здравствуйте!Ребят срочно помогите мне нужно в С# создать программу которая может соединить.

Как узнать ip-адрес всех компьютеров в локальной сети?
Добрый день ребята! хочу написать на Delphi что бы программа смотрел все компьютере локальная сеть.

3378 / 2150 / 352
Регистрация: 13.01.2012
Сообщений: 8,352

список компьютеров: в командной строке
net view
программно — хз. рыть в сторону того способа как отрабатывает эта команда
послать сообщение: в командной строке
net send
программно — 1 млн. вариантов — выбирайте любой

Регистрация: 23.09.2012
Сообщений: 78

не зная никаких параметров, думаю перебором ip и портов может, и смотреть когда не вернет ошибку, либо как-то через udp широковещательное, хотя там нету обратной связи.

Эксперт С++

8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30

Самое простое : пропарсить вывод консольных команд типа «arp -a» или «rout print»

Добавлено через 3 минуты
Ну или другой вариант ( пример для Builder)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
BOOL EnumHandler( HWND hWnd, DWORD dwLevel, LPNETRESOURCE lpNet ) { BOOL ret=TRUE; DWORD dwStatus, dwSize, dwEntries, i, j; LPSTR lpStr=NULL; LPNETRESOURCE lpNewNet=NULL; HANDLE hEnum=NULL; dwStatus = WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpNet, &hEnum ); if( dwStatus != NO_ERROR ){ ret=FALSE; goto mend; } dwEntries = 1000; dwSize = sizeof(NETRESOURCE) * dwEntries; lpNewNet=(LPNETRESOURCE)new char[dwSize]; if(!lpNewNet){ ret=FALSE; goto mend; } dwStatus = WNetEnumResource( hEnum, &dwEntries, (LPVOID)lpNewNet, &dwSize ); if( dwStatus != NO_ERROR ) { ret=FALSE; goto mend; } WNetCloseEnum( hEnum ); hEnum=NULL; lpStr=new char[512]; if(!lpStr){ ret=FALSE; goto mend; } for( i = 0; i  dwEntries; i++ ) { if( lpNewNet[ i ].dwDisplayType==RESOURCEDISPLAYTYPE_NETWORK) { strcpy( lpStr, lpNewNet[ i ].lpProvider ); } if( lpNewNet[ i ].lpRemoteName ) { if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_DOMAIN ) strcpy( lpStr, "Domain. " ); if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_GENERIC ) strcpy( lpStr, "Generic.." ); if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_SERVER ) strcpy( lpStr, "Server. " ); if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_SHARE ) strcpy( lpStr, "Share. " ); for( j = 0; j  dwLevel; j++ ) strcat( lpStr, ". " ); strcat( lpStr, lpNewNet[ i ].lpRemoteName ); //Добавим IP адрес к концу строки // if( lpNewNet[ i ].dwDisplayType == RESOURCEDISPLAYTYPE_SERVER ) // if(!GetIP(&lpNewNet[ i ].lpRemoteName[2],lpStr))continue; } SendMessage( hWnd, LB_ADDSTRING, 0,(LPARAM)lpStr ); UpdateWindow(hWnd); // Уровень детализации вы сможете установить здесь if(dwLevel  2) //0=Сеть,1=Domain,2=Host,3=Resource EnumHandler( hWnd, dwLevel + 1, lpNewNet + i ); } mend: if(hEnum)WNetCloseEnum( hEnum ); if(lpStr)delete lpStr; if(lpNewNet)delete lpNewNet; return ret; } //------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { HCURSOR hOldCursor; // ListBox1->Clear(); SendMessage(Form1->ListBox1->Handle , LB_RESETCONTENT, 0, 0 ); UpdateWindow(Form1->ListBox1->Handle); hOldCursor = ::SetCursor( LoadCursor( NULL, IDC_WAIT ) ); EnumHandler( Form1->ListBox1->Handle, 0, NULL ); ::SetCursor( hOldCursor ); }

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Как узнать свой host и IP-адрес на C#

Создадим простенькую программку, которая сможет узнать имя host’a и IP текущего компьютера.

Для начала разберемся в определениях.

host — это один определенный компьютер или сервер, подключенный к конкретной сети. Если нужно подключиться к локальной сети или к глобальной сети Интернет, то для этого понадобится хост и его IP-адрес.

IP-адрес — это уникальный адрес одной конкретной компьютерной сети. IP-адрес преимущественно состоит из четырёх чисел, разделенных между собой точкой. Нужен он нам для того, чтобы другие компьютеры или сервера могли распознать наш запрос, отправить его по месту назначения, а затем переслать обратно полученную информацию.

Итак, для начала создадим форму Windows Forms. Она незамысловатая: всё, что нам понадобится — это 2 Label’a и 2 TextBox’a.

Как узнать свой host и IP-адрес на C#

Затем нажимаем правой кнопкой мыши на форме и выбираем пункт: «Перейти к коду».

Для начала нам нужно подключить директиву System.Net, которая позволяет программировать, используя различные сетевые протоколы. Иными словами, разрешает программирование для интернета. Подключаем её, используя using , в самом начале кода, среди прочих директив и библиотек. Примерно так:

using System ;
using System . Collections . Generic ;
using System . ComponentModel ;
using System . Data ;
using System . Drawing ;
using System . Linq ;
using System . Text ;
using System . Threading . Tasks ;
using System . Windows . Forms ;
using System . Net ;

Отлично, теперь мы можем использовать различные сетевые протоколы. Например, протолок IP.

Теперь мы получим наш host и IP следующим образом:

string Host = System . Net . Dns . GetHostName ( ) ;
string IP = System . Net . Dns . GetHostByName ( Host ) . AddressList [ 0 ] . ToString ( ) ;

Пишем мы эти строки в теле функции, отвечающей за загрузку формы (внутри кавычек private void Form1_Load(object sender, EventArgs e)). То есть при загрузке формы (при запуске программы), данные сразу поступят в неё.

Разберем, что мы написали. Для начала мы объявили переменную с именем Host, у которой тип данных string, т.е. строковой тип. Это означает, что всё, что записано в нашей переменной представлено в виде обычной строки (неизвестно, находятся ли там внутри буквы, какие-либо символы или числа).

Далее мы говорим программе, что надо записать в эту переменную. Нам нужен хост, поэтому мы прописываем как бы «путь», по которому мы сможем его получить.

Сначала обращаемся к директиве System.Net, то есть подключаемся к сетевым протоколам. Затем через точку пишем Dns. Этот классом мы говорим, что хотим обратиться к определенному протоколу — протоколу IP. Затем тоже через точку пишем GetHostName. Дословно в английского это переводится как «Получить имя хоста», что нам и нужно. Теперь в переменной Host записано имя нашего хоста. Примерно таким же образом получаем IP-адрес.

Создаем ещё одну переменную IP такого же формата string. Далее создаём «путь» к получению IP-адреса. System.Net.Dns. уже знакомы нам. Далее идёт GetHostByName(Host). Примерно переводится как «получить хост по имени». Дело в том, что чтобы нам получить IP-адрес, нужно указать сначала его хост, что мы и делаем, указывая имя нашего хоста в скобках переменной Host (как мы помним, именно там он у нас и записан). Далее мы пишем массив свойств AddressList[0], в который мы и получаем наш IP-адрес. ToString() в конце мы пишем из-за того, что нам надо перевести массив с нашим адресом в строковой формат, чтобы наш адрес успешно записался в строковой формат переменной IP.

Итак, мы получили наш хост и наш IP-адрес.

Остаётся лишь вывести их в форму для того, чтобы пользователь смог увидеть их.
Поэтому ниже мы пишем:

C как получить ip адрес компьютера

my-sql,
У Стивенса есть пример такой программки:
Пример: определение IP-адресов локального узла
Чтобы определить IP-адреса локального узла, мы вызываем функцию uname для получения имени узла, а затем — функцию gethostbyname для получения всех его IP-адресов. Функция my_addrs, показанная в листинге 9.3, выполняет перечисленные задачи.
Листинг 9.3. Функция, возвращающая все IP-адреса узла
/

/lib/my_addrs.с
#include «unp.h»
char ** my_addrs(int *addrtype)
struct hostent *hptr;
struct utsname myname;
if ( (hptr = gethostbyname(myname.nodename)) == NULL)
return (NULL);
*addrtype = hptr->h_addrtype;
return (hptr->h_addr_list);

Возвращаемое значение функции — это элемент h_addr_lst структуры hostent, массив указателей на IP-адреса. Мы также возвращаем семейство адресов через аргумент-указатель.
Другой способ определить IP-адреса локального узла — воспользоваться командой SIOCGIFCONF функции loctl.
PS -возможны ошибки сканирования

Функция uname()
Эта функция позволяет программе отслеживать некоторые основные параметры данного хоста.
#include
int uname(struct utsname *name);
Вызов этой функции приводит к заполнению специальной структуры типа utsname, расположенной по указанному аргументом адресу, некоторыми характеристиками хоста:

#define _UTS_NAMESIZE 16 /* Значения констант, принятые в 4.4BSD */
#define _UTS_NODESIZE 256
struct utsname
char sysname[_UTS_NAMESIZE ]; /* Имя ОС хоста */
char nodename[_UTS_NODESIZE ]; /* Имя данного хоста */
char release[_UTS_NAMESIZE ]; /* Наименование версии ОС хоста */
char version[_UTS_NAMESIZE ]; /* Наименование модификации ОС хоста */
char machine[_UTS_NAMESIZE ]; /* Тип компьютера */

В принципе вариантов много, надо только выбрать.
PS. А причем тут IPv6.

Сообщение отредактировано: Oleg2004 — 20.01.05, 09:41
Сообщ. #9 , 20.01.05, 10:42

наверное, не при чем.

может быть дело в том, что FreeBSD?
в Linux это работает.

странно, что имя первого интерфейса правильно вывелось, а дальше ерунда пошла

P.S. сорри, фри нету под рукой, проверить не на чем

Сообщ. #10 , 20.01.05, 20:38
Unregistered

Программа ниже ваще не компилится — unp.h не существует нигде и неопределено что есть NULL:
#include «unp.h»
#include
char ** my_addrs(int *addrtype) < struct hostent *hptr; struct utsname myname;
if (uname(&myname) < 0) return (NULL);
if ( (hptr = gethostbyname(myname.nodename)) == NULL) return (NULL);
*addrtype = hptr->h_addrtype; return (hptr->h_addr_list); >

Зато прога ниже компилится и выдаёт результат — test-drive.home 192.168.0.2
#include
#include
#include
#include
#include
#include
#include
main () char HostName[64]; gethostname(HostName, 60); struct hostent *Pointer; char *ip;
Pointer = gethostbyname(HostName); printf(«%s\n»,HostName);
ip=Pointer->h_addr_list[0]; unsigned char a,b,c,d; a=ip[0]; b=ip[1]; c=ip[2]; d=ip[3];
printf («%u.%u.%u.%u\n»,a,b,c,d); printf(«IP=%s\n»,HostName); >

Почти с этого и началась эта ветка!
Это, конечно, не все адреса. Где хотябы 127.0.0.1?
IPv6 во FreeBSD начиная с 4.0 есть сразу, у меня 5.1. Ничего не делал, адреса сами привязались.
Но, функция gethostbyname() ВООБЩЕ не отвечает на поставленный вопрос.
Почувствуйте разницу между IP-адресами и связкой имя_машины, содержимое /etc/hosts или PTR-записей в DNS.
Достаточно заменить в /etc/hosts строчку:
192.168.0.2 test-drive.home test-drive
на, допустим:
172.16.0.2 test-drive.home test-drive
и перезапустить программу, чтобы убедиться в абсурдности использования gethostbyname() для определения IP-адресов.
Буду дёргать ioctl

Сообщ. #11 , 20.01.05, 21:07
Рейтинг (т): 215
my-sql,
#include «unp.h»

Да, этого хедера конечно нет, фрагмент я привел как пример идеи из Стивенса, у него в этот хедер позапихано все что можно и более того.
Это только часть — думаю, что многое можно убрать

#include /* basic system data types */
#include /* basic socket definitions */
#include /* timeval<> for select() */
#include /* timespec<> for pselect() */
#include /* sockaddr_in<> and other Internet defns */
#include /* inet(3) functions */
#include /* for nonblocking */
#include /* for S_xxx file mode constants */
#include /* for iovec<> and readv/writev */
#include /* for Unix domain sockets */

и т.д.
В принципе конечно применение gethostbyname() возможно только в определенных случаях.
Ниже приводится тоже фрагмент программы, но в Linuxe:

struct sockaddr_in s;
// Структура ifreq описана в и содержит текущие параметры и // настройки сетевого интерфейса хоста.
struct ifreq ifr;
memset((void *)&ifr, 0, sizeof(struct ifreq));
if((fd = socket(AF_INET,SOCK_DGRAM,0)) < 0)return (-1); sprintf(ifr.ifr_name,"%s",intf); /* Определяем IP адрес сетевого интерфейса */ if(ioctl(fd, SIOCGIFADDR, &ifr) < 0) perror("ioctl SIOCGIFADDR"); memset((void *)&s, 0, sizeof(struct sockaddr_in)); memcpy((void *)&s, (void *)&ifr.ifr_addr, sizeof(struct sockaddr)); memcpy((void *)&ifp->ip, (void *)&s.sin_addr.s_addr, sizeof(__u32));
/*Определяем маску подсети */
if(ioctl(fd, SIOCGIFNETMASK, &ifr) < 0) perror("ioctl SIOCGIFNETMASK"); memset((void *)&s, 0, sizeof(struct sockaddr_in)); memcpy((void *)&s, (void *)&ifr.ifr_netmask, sizeof(struct sockaddr)); memcpy((void *)&ifp->mask, (void *)&s.sin_addr.s_addr, sizeof(u_long));

Тоже самое — это фрагмент, только демонстрирующий идею — я не знаю, как она подойдет к FreeBSD.
Сообщение отредактировано: Oleg2004 — 20.01.05, 21:10
Сообщ. #12 , 20.01.05, 21:46
Unregistered

Как правильно записать IFpointer=IFaddrs->ifa_name чтобы компилер не ругался:
request for member `ifa_name’ in something not a structure or union

printf («%s\n»,IFpointer);
//IFlags=IFaddrs->ifa_flags; SockAddr=IFaddrs->ifa_addr;
//(struct sockaddr *)IFpointer=IFaddrs->ifa_addr; //request for member `ifa_addr’ in something not a structure or union
//SockAddr=IFaddrs->ifa_addr->sa_family;
>
/*
struct ifaddrs struct ifaddrs *ifa_next; // Pointer to next struct
char *ifa_name; // Interface name
u_int ifa_flags; // Interface flags
struct sockaddr *ifa_addr; // Interface address
struct sockaddr *ifa_netmask; // Interface netmask
struct sockaddr *ifa_broadaddr; // Interface broadcast address //only in manual, not header
struct sockaddr *ifa_dstaddr; // P2P interface destination
void *ifa_data; // Address specific data
>;

struct sockaddr unsigned char sa_len; // total length
sa_family_t sa_family; // address family
char sa_data[14]; // actually longer; address value
>;
*/

Добавлено 20.01.05, 22:27
Вот адаптированный вариант, но всё равно не компилится из-за ошибок в указании элементов структур.
Ошибки:
structure has no member named `ifr_netmask’
request for member `ip’ in something not a structure or union
request for member `mask’ in something not a structure or union
invalid type argument of `->’

#include //struct sockaddr_in
#include //struct ifreq
#include //#define SIOCGIFADDR
main() < int fd; struct sockaddr_in s; struct ifreq ifr;
// Структура ifreq содержит текущие параметры и настройки сетевого интерфейса хоста
memset((void *)&ifr, 0, sizeof(struct ifreq));
if((fd = socket(AF_INET,SOCK_DGRAM,0)) < 0)return (-1);
char intf[100]; sprintf(ifr.ifr_name,»%s»,intf); //intf==?

Сейчас не компилится из-за
17: invalid type argument of `->’
21: invalid type argument of `->’
22: invalid type argument of `->’

Меняю -> на . появляются другие ошибки
17: structure has no member named `ip’
21: structure has no member named `ifr_netmask’
22: structure has no member named `mask’

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *