Réseaux et Télécom » [C] Qui est au bout du fil..?
[C] Qui est au bout du fil..?
Publié le 03/02/2009 @ 16:47:07,
Par blietaerBonjour,
J'aurais besoin de faire un petit bout de netstat, mais sans réinventer la roue...ni appeler netstat
En fait, dans un programme C, je voudrais savoir qui est à l'autre bout de la connection TCP dont je connais le port et un des deux peer (la machine sur laquelle tourne le-dit programme)
Attention, le soquet n'est _pas_ initialisé par ce programme (il est en fait déjà démarré ailleurs. Ex: telnet, netcat,...)
Je voudrais donc, à la netstat, donner à une fonction le numero du port et récupérer l'IP de l'autre peer....
possible?
Plus compliqué que de passer un "netstat -laputen | grep 3333" à un system(); ?
(solution que je voudrais éviter parce que laide...non?)
Merci
J'aurais besoin de faire un petit bout de netstat, mais sans réinventer la roue...ni appeler netstat
En fait, dans un programme C, je voudrais savoir qui est à l'autre bout de la connection TCP dont je connais le port et un des deux peer (la machine sur laquelle tourne le-dit programme)
Attention, le soquet n'est _pas_ initialisé par ce programme (il est en fait déjà démarré ailleurs. Ex: telnet, netcat,...)
Je voudrais donc, à la netstat, donner à une fonction le numero du port et récupérer l'IP de l'autre peer....
possible?
Plus compliqué que de passer un "netstat -laputen | grep 3333" à un system(); ?
(solution que je voudrais éviter parce que laide...non?)
Merci
Et au besoin s'arrêter.
[C] Qui est au bout du fil..?
Publié le 03/02/2009 @ 16:56:28,
Par Dr_DanTcpview de sysinternals..
http://technet.microsoft.com/en-us/sysinternals/default.aspx
http://technet.microsoft.com/en-us/sysinternals/default.aspx
Se tromper est humain ; Vraiment foutre la merde necessite le mot de passe de root.
[C] Qui est au bout du fil..?
Publié le 03/02/2009 @ 17:16:08,
Par blietaerj'ai précisé que je parlais de monde Linux?
ah non...voila qui est fait.
ah non...voila qui est fait.
Et au besoin s'arrêter.
[C] Qui est au bout du fil..?
Publié le 03/02/2009 @ 17:20:08,
Par philfrSous linux ?
Edith: ah, ok...
Parser le fichier /proc/net/tcp est la solution...
Dernière édition: 03/02/2009 @ 17:21:01
Edith: ah, ok...
Parser le fichier /proc/net/tcp est la solution...
Dernière édition: 03/02/2009 @ 17:21:01
[C] Qui est au bout du fil..?
Publié le 03/02/2009 @ 17:25:40,
Par blietaerGENIAL !
Et au besoin s'arrêter.
[C] Qui est au bout du fil..?
Publié le 03/02/2009 @ 17:35:27,
Par philfr#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
FILE *fp;
char buffer[80];
int n, la, lp, ra, rp;
int ret;
int port;
struct in_addr radd;
if(argc != 2)
{
fprintf(stderr, "Usage %s <local port number>\n", argv[0]);
exit(1);
}
port=strtol(argv[1], NULL, 0);
fp=fopen("/proc/net/tcp", "r");
while(!feof(fp))
{
fgets(buffer, sizeof(buffer), fp);
ret=sscanf(buffer, "%d: %x:%x %x:%x", &n, &la, &lp, &ra, &rp);
if(ret==5)
{
if(lp==port)
{
radd.s_addr=ra;
printf("Remote address %s, remote port %d\n", inet_ntoa(radd), rp);
}
}
}
}
Dernière édition: 03/02/2009 @ 23:03:13
[C] Qui est au bout du fil..?
Publié le 03/02/2009 @ 18:03:04,
Par blietaerEt au besoin s'arrêter.
[C] Qui est au bout du fil..?
Publié le 03/02/2009 @ 23:02:56,
Par philfrN'oublie pas qu'à l'autre bout d'un même port, tu peux en avoir plusieurs autres (mon prog s'arrête au premier, sans raison, je corrige).
Et si tu veux aussi les connexions IPv6, c'est /proc/net/tcp6 que tu dois parser.
Et si tu veux aussi les connexions IPv6, c'est /proc/net/tcp6 que tu dois parser.
[C] Qui est au bout du fil..?
Publié le 04/02/2009 @ 09:11:42,
Par blietaerC'est typiquement ce genre de choses qui m'excitent sous Linux mais qui m'énerve aussi d'avoir sous la main sans le savoir...j'espère que le nouveau livre que viens d'acheter (Essential Linux Drivers) m'aidera à progresser (bien que ce ne soit pas vraiment IP-oriented)
Il faut être super-humble avec sa courbe d'apprentissage à notre âge...
Merci.
Il faut être super-humble avec sa courbe d'apprentissage à notre âge...
Merci.
Et au besoin s'arrêter.
[C] Qui est au bout du fil..?
Publié le 04/02/2009 @ 09:19:16,
Par philfrstrace est souvent ton ami.
Si tu te demandes comment fait netstat pour trouver cette info, strace netstat te le dit...
Si tu te demandes comment fait netstat pour trouver cette info, strace netstat te le dit...
[C] Qui est au bout du fil..?
Publié le 04/02/2009 @ 09:57:06,
Par rfrstrace est souvent ton ami.
Si tu te demandes comment fait netstat pour trouver cette info, strace netstat te le dit...
Si tu te demandes comment fait netstat pour trouver cette info, strace netstat te le dit...
strace est effectivement un ami de longue date. Mais il ne faudrait pas non plus le laisser dans l'ignorance de ce bon vieux ltrace qui permet, en plus des appels système, de tracer les appels à la libc et à d'autres librairies du système.
To die is a time consuming activity, it often takes a lifetime (but some are faster than others ... though)
[C] Qui est au bout du fil..?
Publié le 04/02/2009 @ 10:32:22,
Par Dr_Danj'ai précisé que je parlais de monde Linux?
ah non...voila qui est fait.
ah non...voila qui est fait.
Désolé, hier, j'étais dans un trip windows. ( ca dépend du client )
strace est effectivement un ami de longue date. Mais il ne faudrait pas non plus le laisser dans l'ignorance de ce bon vieux ltrace qui permet, en plus des appels système, de tracer les appels à la libc et à d'autres librairies du système.
MAN is the only friend you must have...
Se tromper est humain ; Vraiment foutre la merde necessite le mot de passe de root.
[C] Qui est au bout du fil..?
Publié le 04/02/2009 @ 12:51:49,
Par blietaerMmh bien sur c'est pas lp qui m'intéresse mais rp pour la detection du port server (si je suis client)
Tiens pour tester le joujou, j'utilise netcat, mais dès que je referme le telnet...le serveur netcat saute, on sait pas le faire redémarrer tt le temps?
ou alors j'écris un brol en C qui tient plus longtps?
Tiens pour tester le joujou, j'utilise netcat, mais dès que je referme le telnet...le serveur netcat saute, on sait pas le faire redémarrer tt le temps?
ou alors j'écris un brol en C qui tient plus longtps?
Et au besoin s'arrêter.
[C] Qui est au bout du fil..?
Publié le 04/02/2009 @ 13:04:52,
Par philfrPour un client à la fois, tu peux lancer nc dans un while.
Et pour du multiclient, fais ça en python:
#!/usr/bin/env python
import socket
s=socket.socket()
s.bind(("0.0.0.0",2345))
s.listen(5)
l=[]
while 1:
l.append(s.accept())
Et pour du multiclient, fais ça en python:
#!/usr/bin/env python
import socket
s=socket.socket()
s.bind(("0.0.0.0",2345))
s.listen(5)
l=[]
while 1:
l.append(s.accept())
[C] Qui est au bout du fil..?
Publié le 06/02/2009 @ 11:05:16,
Par blietaerTiens y a le même genre de /proc file pour "ps -auxww" ?
Et au besoin s'arrêter.
[C] Qui est au bout du fil..?
Publié le 06/02/2009 @ 11:59:40,
Par philfrTout ce que ps te dit, il le trouve dans /proc/<pid>
/proc/<pid>/status, /proc/<pid>/fd, /proc/<pid>/cwd, /proc/<pid>/cmdline, /proc/<pid>/maps sont sympas, mais tous les autres aussi...
/proc/<pid>/status, /proc/<pid>/fd, /proc/<pid>/cwd, /proc/<pid>/cmdline, /proc/<pid>/maps sont sympas, mais tous les autres aussi...
[C] Qui est au bout du fil..?
Publié le 06/02/2009 @ 13:09:57,
Par blietaerOK, donc je devrais refaire le boulot de PS pour avoir une vue de tous les processes...ca sent le execve("ps -auxww")
Et au besoin s'arrêter.