Background
In this post, I want to introduce my new project: cPacketSniffer
. I worked on it for the past two months. Finally, I worked it out and feel very proud of putting it here!
Motivation
Simply speaking, I want to sharpen my techniques in network programming
and Linux system programming
. Both of these two topics can lead you to the bottom of computers or software. Feynman said “There is plenty of room at the bottom”, I think this physics law can apply to software as well.
Acknowledgement
It’s very lucky for me to come across this site “Network programming in Linux”, which developed a network packet capturing tool with C++
. After confirming that the documents and source code on this site is completed and clear, I decided to refactor it with C language. That’s the starting point for my project cPacketSniffer
.
Features
As a network packets sniffer, cPacketSniffer
provides the following features:
- Integrate with
libpcap
to support: filtering captured packets, capturing packets offline, capturing packets on specific devices and capturing packets in promiscuous mode. - Analyze network packets at low layers of TCP/IP stack, including
Ethernet
,ARP
,ICMP
,IP(IPv4)
,TCP
,UDP
, etc. Also one protocol in the application layer:TFTP
. - Detect network security attacks:
- ARP spoofing detection.
- Ping flood detection.
- Analyze and track network traffics:
- TCP session tracking and traffic analysis.
- TFTP session tracking and traffic analysis.
The following images demonstrate some typical usages of cPacketSniffer
:
Packet Analysis:
ARP Spoofing Detection:
PING Flood Detection:
TCP Session Tracking:
Besides the above network programming-related functionalities, it also covers the following points:
- Develop a generic data structure in C.
- Error handling in C.
- Data encapsulation (object-oriented style programming) in C.
- Manual memory management in C.
- etc.
This article will not cover these points in detail, I will write articles on these topics separately in the future. Please keep watching my blog!
Future work
Now cPacketSniffer
can work as a network packet sniffer based on the design. Moreover, it can also serve as a testbed to try experimental features. Next step I plan to try the following ideas:
- Implement the network intrusion detection function.
- Improve the performance with advanced data structures, like binary search trees.
- Memory and cache performance tuning.
- Automatic memory management by Garbage Collection.
- Integrate
ncurses
for Text-based user interface.