2010-02-13 5 views
2

Je voudrais écrire une application comme un netstat - pour montrer toutes les connexions actives et les ports ouverts respectivement. Le problème est que je ne sais pas comment le faire - j'ai fait de la programmation réseau mais en général c'était un simple paquet client-serveur et de simples paquets TCP/UDP envoyant/recevant. J'ai regardé le code netstat mais il semble vraiment complexe. Je lis aussi le livre de programmation réseau Unix et attend mes copies de TCP/IP Illustrated (le vol 1 et 2).Écrire un programme comme netstat

Un conseil les gars? Quelqu'un a de l'expérience avec des trucs comme ça? Si oui, quelqu'un peut-il m'aider un peu ici? Les choses importantes à faire etc etc. J'apprécierai chaque réponse utile.

Merci d'avance.

+0

Bienvenue sur le réseau! À mon humble avis, c'est l'un des domaines les plus agréables de la programmation système. – Ether

Répondre

5

Vous pouvez le faire, mais vous vous rendez compte que l'implémentation sera spécifique au système d'exploitation. En effet, chaque système d'exploitation expose ses compteurs et ses statistiques différemment. Par exemple, sur Linux, vous pouvez obtenir la plupart des statistiques en analysant les fichiers dans /proc/net. Le vidage du contenu de /proc/net/dev vous donne la liste des interfaces (avec quelques statistiques).

# cat /proc/net/dev 
Inter-| Receive            | Transmit 
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed 
    lo:1417676206 2810305 0 0 0  0   0   0 1417676206 2810305 0 0 0  0  0   0 
    eth0:3780840146 96049486 0 0 0  0   0   0 2202685287 17436558 0 0 0  0  0   0 

Ou, l'analyse syntaxique /proc/net/netstat vous donnera les statistiques du protocole (TCP/IP):

# cat /proc/net/netstat 
TcpExt: SyncookiesSent SyncookiesRecv SyncookiesFailed EmbryonicRsts PruneCalled RcvPruned OfoPruned OutOfWindowIcmps LockDroppedIcmps ArpFilter TW TWRecycled TWKilled PAWSPassive PAWSActive PAWSEstab DelayedACKs DelayedACKLocked DelayedACKLost ListenOverflows ListenDrops TCPPrequeued TCPDirectCopyFromBacklog TCPDirectCopyFromPrequeue TCPPrequeueDropped TCPHPHits TCPHPHitsToUser TCPPureAcks TCPHPAcks TCPRenoRecovery TCPSackRecovery TCPSACKReneging TCPFACKReorder TCPSACKReorder TCPRenoReorder TCPTSReorder TCPFullUndo TCPPartialUndo TCPDSACKUndo TCPLossUndo TCPLoss TCPLostRetransmit TCPRenoFailures TCPSackFailures TCPLossFailures TCPFastRetrans TCPForwardRetrans TCPSlowStartRetrans TCPTimeouts TCPRenoRecoveryFail TCPSackRecoveryFail TCPSchedulerFailed TCPRcvCollapsed TCPDSACKOldSent TCPDSACKOfoSent TCPDSACKRecv TCPDSACKOfoRecv TCPAbortOnSyn TCPAbortOnData TCPAbortOnClose TCPAbortOnMemory TCPAbortOnTimeout TCPAbortOnLinger TCPAbortFailed TCPMemoryPressures TCPSACKDiscard TCPDSACKIgnoredOld TCPDSACKIgnoredNoUndo TCPSpuriousRTOs TCPMD5NotFound TCPMD5Unexpected 
TcpExt: 0 0 7053 2480 0 0 0 0 0 0 136514 0 0 0 0 4732 1291978 48 10938 0 0 726917 0 14734 0 3505285 23 3285967 4288783 963 56625 82 294 218 85 153 80 817 739 4861 176075 7864 246 3859 1647 285964 13690 54668 25710 599 4775 0 0 10792 21 12994 1492 0 305 27 0 946 0 0 0 1178 5175 3188 353 0 0 
IpExt: InNoRoutes InTruncatedPkts InMcastPkts OutMcastPkts InBcastPkts OutBcastPkts 
IpExt: 0 0 372 14 269538 0 

Ou /proc/net/udp vous donne des informations de connexion UDP:

# cat /proc/net/udp 
    sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops    
    20: 0100007F:1194 00000000:0000 07 00000000:00000000 00:00000000 00000000  0  0 6788392 2 f6701b80 0     
    20: 4CE85CD0:1194 00000000:0000 07 00000000:00000000 00:00000000 00000000  0  0 6788384 2 f6703200 0     
    20: 4DE85CD0:1194 00000000:0000 07 00000000:00000000 00:00000000 00000000  0  0 6788379 2 f6701e00 0     
    39: 00000000:0AA7 00000000:0000 07 00000000:00000000 00:00000000 00000000 108  0 6790562 2 d2890f00 0     
    40: 00000000:11A8 00000000:0000 07 00000000:00000000 00:00000000 00000000 108  0 6790539 2 d2892580 0     
    68: 00000000:13C4 00000000:0000 07 00000000:00000000 00:00000000 00000000 108  0 6790505 2 d2892d00 0     
    87: 00000000:87D7 00000000:0000 07 00000000:00000000 00:00000000 00000000 106  0 6957 2 f67b0f00 0     
    89: 00000000:11D9 00000000:0000 07 00000000:00000000 00:00000000 00000000 108  0 6790508 2 d2890500 0     
105: 00000000:14E9 00000000:0000 07 00000000:00000000 00:00000000 00000000 106  0 6956 2 f67b2580 0     
116: 0100007F:01F4 00000000:0000 07 00000000:00000000 00:00000000 00000000  0  0 6788388 2 f6701900 0     
116: 4CE85CD0:01F4 00000000:0000 07 00000000:00000000 00:00000000 00000000  0  0 6788382 2 f6701180 0     
116: 4DE85CD0:01F4 00000000:0000 07 00000000:00000000 00:00000000 00000000  0  0 6788378 2 f6702f80 0     
120: 0100007F:88F8 0100007F:88F8 01 00000000:00000000 00:00000000 00000000 107  0 6790576 2 f67b0a00 0 

Hope this helps.

Questions connexes