Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/git-hulk/tcpkit
the tcpkit was designed to make network packets programable with Lua script
https://github.com/git-hulk/tcpkit
Last synced: 2 days ago
JSON representation
the tcpkit was designed to make network packets programable with Lua script
- Host: GitHub
- URL: https://github.com/git-hulk/tcpkit
- Owner: git-hulk
- License: mit
- Created: 2015-11-21T14:44:15.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2021-02-22T09:00:56.000Z (almost 4 years ago)
- Last Synced: 2025-01-05T22:07:41.596Z (9 days ago)
- Language: C
- Homepage:
- Size: 2.45 MB
- Stars: 456
- Watchers: 25
- Forks: 60
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-hacking-lists - git-hulk/tcpkit - the tcpkit was designed to make network packets programable with Lua script (C)
README
# tcpkit [![Build Status](https://travis-ci.com/git-hulk/tcpkit.svg?branch=master)](https://travis-ci.com/git-hulk/tcpkit)
The tcpkit was designed to analyze network packets with lua script, can also be used to observe the request latency
of the service with simple protocol, like `redis`/`memcached`.## Install
```
$ git clone https://github.com/git-hulk/tcpkit.git tcpkit
$ cd tcpkit
$ sudo make && make install
```## Usage
```shell
the tcpkit was designed to make network packets programable with LUA by @git-hulk
-h, Print the tcpkit version strings, print a usage message, and exit
-i interface, Listen on network card interface
-r file, Read packets from file (which was created with the -w option or by other tools that write pcap)
-A Print each packet (minus its link level header) in ASCII. Handy for capturing web pages
-B buffer_size, Set the operating system capture buffer size to buffer_size, in units of KiB (1024 bytes)
-s snaplen, Snarf snaplen bytes of data from each packet rather than the default of 1500 bytes
-S file, Push packets to lua state if the script was specified
-t threshold, Print the request lantecy which slower than the threshold, in units of Millisecond
-w file, Write the raw packets to file
-p protocol, Parse the packet if the protocol was specified (supports: redis, memcached, http, raw)
-P stats port, Listen port to fetch the latency stats, default is 33333For example:
`tcpkit -i eth0 tcp port 6379 -p redis` was used to monitor the redis reqeust latency
`tcpkit -i eth0 tcp port 6379 -p redis -w 6379.pcap` would also dump the packets to `6379.pcap`
`tcpkit -i eth0 tcp port 6379 -p redis -t 10` would only print the request latency slower than 10ms
```## How To Observe The Latency Of Redis/Memcached
```shell
$ tcpkit -i eth0 tcp port 6379 -p redis
```tcpkit would listen on NIC `eth0` and caputure the tcp port `6379`, then parse network packets with Redis protocol.
The output was like below:```
2020-03-08 19:23:06.253384 127.0.0.1:51137 => 127.0.0.1:6379 | 0.615 ms | COMMAND
2020-03-08 19:23:06.258761 127.0.0.1:51137 => 127.0.0.1:6379 | 0.059 ms | get a
```Use the option `-t` would only show the request which the request latency was slower than threshold(in units of millisecond).
## How to Use Lua Script
```
$ tcpkit -i eth0 tcp port 6379 -p redis -S scripts/example.lua
```the callback function `function process(packet)` in `scripts/example.lua` would be triggered if new packets reached.
### Predefine Scripts
1. [exmaple.lua](https://github.com/git-hulk/tcpkit/blob/master/scripts/example.lua) - example for user defined script
2. [dns.lua](https://github.com/git-hulk/tcpkit/blob/master/scripts/dns.lua) - print the dns latency
3. [tcp-connnect.lua](https://github.com/git-hulk/tcpkit/blob/master/scripts/tcp-connect.lua) - print connection with syn packet retransmit## Request Latency
the stats port listen on `33333` by default, use the `-P` to change the listen port.
```json
➜ ~ telnet 127.0.0.1 33333
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.{
"127.0.0.1:6379": {
"requests": 1700,
"request_bytes": 184100,
"responses": 1700,
"response_bytes": 1413764,
"latency": [{
"<0.1ms": 326
}, {
"0.1ms~0.2ms": 371
}, {
"0.2~0.5ms": 589
}, {
"0.5ms~1ms": 291
}, {
"1ms~5ms": 123
}]
}
}
```## License
tcpkit is under the MIT license. See the LICENSE file for details.