Skip to content

Instantly share code, notes, and snippets.

@maliubiao
Created November 29, 2013 04:22
Show Gist options
  • Select an option

  • Save maliubiao/7701552 to your computer and use it in GitHub Desktop.

Select an option

Save maliubiao/7701552 to your computer and use it in GitHub Desktop.
network activity monitor.
#! /usr/bin/env python
import os
import sys
import time
import signal
import subprocess
stap_script = """
global counter = 0
global SOCK_STREAM = 1
global SOCK_DGRAM = 2
global SOCK_RAW = 3
global SOCK_RDM = 4
global SOCK_SEQPACKET = 5
global SOCK_DCCP = 6
global SOCK_PACKET = 10
global AF_LOCAL = 1
global AF_INET = 2
global AF_INET6 = 10
function family2string:string(family:long) {
if (family == AF_INET) {
return "AF_INET"
} else if (family == AF_LOCAL) {
return "AF_LOCAL"
} else if (family == AF_INET6) {
return "AF_INET6"
}
return "PROTO UNKNOWN"
}
function type2string:string(type:long) {
if (type == SOCK_STREAM) {
return "SOCK_STREAM"
} else if (type == SOCK_DGRAM) {
return "SOCK_DGRAM"
} else if (type == SOCK_RAW) {
return "SOCK_RAW"
} else if (type == SOCK_RDM) {
return "SOCK_RDM"
} else if (type == SOCK_SEQPACKET) {
return "SOCK_SEQPACKET"
} else if (type == SOCK_DCCP) {
return "SOCK_DCCP"
} else if (type == SOCK_PACKET) {
return "SOCK_PACKET"
}
return "SOCK_UNKNOWN"
}
probe socket.create {
if (counter < 10000) {
if (execname() == "uwsgi") {
printf("%d, %s, type: %s, family: %s\\n", pid(), execname(), type2string(type), family2string(family))
counter += 1
}
} else {
exit()
}
}
probe socket.send {
if (counter < 10000) {
if (execname() == "uwsgi") {
printf("%d, %s, send: %d\\n", pid(), execname(), size)
counter += 1
}
} else {
exit()
}
}
probe socket.receive {
if (counter < 10000) {
if (execname() == "uwsgi") {
printf("%d, %s, received: %d type: %s, family: %s\\n", pid(), execname(), size, type2string(type), family2string(family))
counter += 1
}
} else {
exit()
}
}
"""
def handler(signum, frame):
exit()
def print_usage():
print "socket-connect.py"
if __name__ == "__main__":
#write script
tmp = "stap.tmp"
with open(tmp, "w+") as f:
f.write(stap_script)
try:
status3 = os.fork()
except OSError as e:
print e
if status3 == 0:
try:
os.execvp("stap", ['stap',
"-v",
"-s", "32",
"-D", "MAXERRORS=10",
"-D", "MAXTRACE=100",
"-D", "MAXSTRINGLEN=4096",
"-D", "MAXMAPENTRIES=10240",
"-D", "MAXACTION=10000",
"-D", "STP_OVERLOAD_THRESHOLD=50000000",
"%s" % tmp])
except OSError as e:
print e
signal.signal(signal.SIGINT, handler)
os.wait()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment