CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C et adresse réseau

kenshiro1980
kenshiro1980
Niveau 7
28 février 2004 à 18:58:19

salut

quelqu´un connaitrai comment faire pour récupérer l´adresse réseau d´une machine, de la machine sur laquelle le processus est en cours d´exécution.(pas l´adresse " local" hein)

merci bien

jarose
jarose
Niveau 10
28 février 2004 à 20:05:11

yop

Tu veux récupérer le pid ? ( process id)

J´ai pas trop compris ce que tu voulais faire, si tu pouvais être un peu plus clair :)

kenshiro1980
kenshiro1980
Niveau 7
28 février 2004 à 20:55:45

poy

non pas le pid
pour être plus clair :
j´ai l´adresse local ( basiquement 127.0.0.1)
et une adresse de l´interface ethernet ( exemple 192.168.0.1)
et donc, ce que je veux faire c´est récupérer celle là : 192.168.0.1

si tu sais faire fait péter ! :)

jarose
jarose
Niveau 10
28 février 2004 à 21:11:20

Dans un programme C ?
Si c´est le cas: man socket :)

kenshiro1980
kenshiro1980
Niveau 7
28 février 2004 à 21:40:32

mais c´est pas des communications que je veux faire . ..
ou alors se connecter localement et récupérer les infos à partir de la socket ? ça me parait lourd rien que pour obtenir une adresse ip . .. :(

t´as pas une autre idée ?

jarose
jarose
Niveau 10
28 février 2004 à 22:25:00

Pas besoin de communiquer avec un autre processus, une fois que tu as inclu le header socket, tu peux utiliser une de ses structure pour récupérer des info. ( par contre je ne connais pas par coeur les nom des fonctions, il faudrait que je fasse un test, donc autant le faire toi même avec l´aide du man).

Sinon, regardes la source des fonctions de la lib, et fais un truc moins lourd, amuses toi bien :)

Altonfrere
Altonfrere
Niveau 10
28 février 2004 à 22:43:22
  1. include < windows.h>
  2. include < stdio.h>
  3. include < Iphlpapi.h>
  4. include < winsock.h>
  1. pragma comment(lib,"Iphlpapi.lib")
  2. pragma comment(lib,"ws2_32.lib")

void main()
{
PMIB_TCPTABLE tcpTable = NULL;
BYTE pBuffer[100*20+4];
DWORD dwTableSize = 100*20+4;

if(GetTcpTable((PMIB_TCPTABLE)pBuffer, &, TRUE) == NO_ERROR)
{
tcpTable = ( PMIB_TCPTABLE)pBuffer;

for(DWORD i=0; i<tcpTable->dwNumEntries; i++)
{
DWORD dwLocIP = htonl(tcpTable->table[i].dwLocalAddr);

printf("%d.%d.%d.%d\n",(dwLocIP&0xFF000000)>>24
,
( dwLocIP&0x00FF0000)>>16,
( dwLocIP&0x0000FF00)>>8,
( dwLocIP&0x000000FF) ) ;
}
}

}

kenshiro1980
kenshiro1980
Niveau 7
28 février 2004 à 22:59:40

jarose> lol j´ai cru que tu voulais parler seulement de l´inclusion de socket.h . ..
en fait j´avais déjà essayé avec les netdb.h et l´autre qui va avec ( je m´en rappelle plus) pour faire le gethostbyname et consort, mais comme on doit lui fournir une adresse décimale pointé, on ne peut mettre que l´adresse local et en affichant le contenu de la structure hostent, je trouve rien, que dalle dans les alias ou tout autre . .. :(
´fin bref j´amuse pas du tout :( et si un jour t´avais le temps de tester ça :D merci

altonfrere> t´aurai pas la version unix/linux par harsard ?

jarose
jarose
Niveau 10
28 février 2004 à 23:48:20
  1. include < netinet/in.h>
  2. include < sys/socket.h>
  3. include < stdio.h>

. ..

void getIP()
{
int sock;
struct sockaddr_in sockaddr;
int socklen = sizeof ( sockaddr);

getsockname ( 0, ( struct sockaddr *)&, &);

printf("IP: %s\n", inet_ntoa(sockaddr.sin_addr));
}

/ *
La chaine renvoyée par inet_ntoa() est contenu dans un buffer alloué statiquement !

  • /

voilà :)

jarose
jarose
Niveau 10
28 février 2004 à 23:57:04

Bon, en remattant mon post j´ai vu que j´avais laissé des truc inutile.

  1. include < netinet/in.h>
  2. include < stdio.h>

void inet_addr()
{
struct sockaddr_in sockaddr;
int socklen = sizeof ( sockaddr);

getsockname ( 0, ( struct sockaddr *)&, &);

printf("IP: %s\n", inet_ntoa(sockaddr.sin_addr));
}

kenshiro1980
kenshiro1980
Niveau 7
29 février 2004 à 00:03:20

CoOl ! ! je vais tester ça mais je ne doute pas de toi

kenshiro1980
kenshiro1980
Niveau 7
29 février 2004 à 00:36:13

mmm . .. ça affiche le bon IP chez toi ? chez moi ça affiche n´importe quoi . .. enfin, un mauvais IP quoi . ..

ackeur
ackeur
Niveau 8
29 février 2004 à 03:55:29

heu, pour faire ça moi j´passerais par une structure ifreq et en récuperant l´adresse du périphérique ( de la carte réseau) qu´on veut par un appel à ioctl , du style

char addr[1024];
int get_ip(char *device) {
int fd, s;
struct ifreq ifr;
struct sockaddr_in sa;

fd=socket(AF_INET, SOCK_PACKET, htons(ETH_P_ALL));

strcpy(ifr.ifr_name, device);
s=ioctl(fd, SIOCGIFADDR, &); / * SIOCGIFADDR pour récuperer l´adresse */

memcpy(&,&.ifr_addr,sizeof(struct sockaddr_in)); / * on fout ça ds une struct sockaddr_in */
/ * et on copie l´adresse dans une var */
strncpy(addr, inet_ntoa(sa.sin_addr), 1024);
return(0);
}

vlà, pas testé, normalement get_ip("eth0") puis printf("%s\n", addr) pour retrouver l´ip de l´interface ethernet par ex, ça devrait être ok

bon voilà, ciao

ackeur, qui ferait mieux de dormir.

ackeur
ackeur
Niveau 8
29 février 2004 à 04:12:19

bon ça fonctionne, cependant deux trois précisions

  • primo faut être root pour utiliser les SOCK_PACKET
  • secondo, les libs qu´on a besoin d´inclure:

. /get_ip lo
127.0.0.1
. /get_ip ppp0
81.250.214.155

; )

@+

jarose
jarose
Niveau 10
29 février 2004 à 06:09:11

kenshiro1980: Oui c´est normal, ça renvoit l´adresse de la socket, alors que tu voulais l´adresse ethernet. Désolé de pas avoir répondu plus tot, mais j´était entrain de faire mumuse avec l´api de Zend :(

J´ai quand même repris l´idée d´ackeur pour écrire ceci:

  1. include < stdio.h>
  1. include < net/if.h>
  2. include < netinet/if_ether.h>
  3. include < netinet/in.h>
  1. include < sys/ioctl.h>

void net_addr ( char *interf)
{
int sock;
struct ifreq irs;
struct sockaddr_in ias;

if ( (sock = socket ( PF_INET, SOCK_DGRAM, 0)) < 0)
{
/ * erreur socket */
}

memset ( &, 0, sizeof ( struct ifreq));
/ * initialisation de la zone mémoire-> 000000000000 */

strncpy ( irs.ifr_name, interf, sizeof ( irs.ifr_name));
/ * copie partielle du nom de l´interface dans la struct ifreq */

if ( ioctl ( sock, SIOCGIFADDR, &) < 0)
{
/ * erreur ioctl */
}
close ( sock);

memcpy ( &, &.ifr_addr, sizeof ( struct ifreq));
/ * copie l´adresse ( uli) dans la struct sockaddr pour _ntoa */

printf ( "%s\n", inet_ntoa ( ias.sin_addr));
/ * retourne 0.0.0.0 si pas d´interface valide */
}

int main ( )
{
net_addr("ppp0");
/ * retourne l´adresse tcp */

net_addr("lo");
/ * retourne l´adresse locale */

net_addr("eth0");
/ * retourne l´adresse de l´interface ethernet */

return 0;
}

-> pas besoin d´être root là :)

kenshiro1980
kenshiro1980
Niveau 7
29 février 2004 à 22:58:18

ok, merci . . mais bon, à vos heures tardives je suis allé dodo moi . .. donc pas grave :)

je vous remerci quand même, je testerai ça plus tard

++

jarose
jarose
Niveau 10
01 mars 2004 à 05:39:16

Oki, dis nous quand même si ça fonctionne avec une interface ethernet, j´ai pas pu tester ça. Mais à priori c´est Op.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment