Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: lug-bg: 2 isp-та и 2 локални мрежи на един интерфеис


  • Subject: Re: lug-bg: 2 isp-та и 2 локални мрежи на един интерфеис
  • From: Евгени Каралъмов <fb@xxxxxxxxxxxx>
  • Date: Thu, 23 Sep 2004 16:20:25 +0300

Marian D Marinov написа:

> Предварително искам да се извиня за некадърно написаното взимане на ИП адреса 
> ама за това се сетих сега това написах :) Което ме навежда на мисълта защно 
> не заформим една тема относно скриптове за взимане на динамично зададен ИП 
> адрес точно за firewalls и shapers?
> 
> Поздрави
> 	М.Маринов

	Зная че не е уместно реализирането на подобна елементарна задача на C
поради редица причини, но въпреки това ето един (повърхностен, без ipv6
и т.н.) пример как програмно могат да се правят такива неща. За някого
може да е от полза.

Компилира се с "gcc -s -o inetaddrof inetaddrof.c" и после "./inetaddrof
eth0" например.
#include <arpa/inet.h>
#include <linux/if.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/socket.h>

int main(int ARGC, char *ARGV[])
{
	fclose(stdin);
	if(2 != ARGC)
	{
		fprintf(stderr, "Usage: %s interface_name\n", *ARGV);
		return EXIT_FAILURE;
	}
	if(strlen(*(ARGV + 1)) >= IFNAMSIZ)
	{
		fprintf(stderr, "%s: too long to be an interface name\n", *(ARGV + 1));
		return EXIT_FAILURE;
	}
	int f = socket(PF_INET, SOCK_DGRAM, 0);
	if(-1 == f)
	{
		perror("socket");
		return EXIT_FAILURE;
	}
	struct ifreq ifr;
	strcpy((char*)&ifr, *(ARGV + 1));
	if(-1 == ioctl(f, SIOCGIFADDR, &ifr))
	{
		perror("ioctl");
		return EXIT_FAILURE;
	}
	printf("%s", inet_ntoa(((struct sockaddr_in*)&ifr.ifr_ifru.ifru_addr)->sin_addr));
	return EXIT_SUCCESS;
}


 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.