今日のネットワーク。続き!の続き!
やばい!!さっき機能を追加したんだけど、
自分なりには満足!!w
それは…なんと! Scapyをつかってより分かりやすくPACKTETを見れるって物です!
最高!!!✌(๑˃̶͈̀◡˂̶͈́๑)✌
あっ、あと、受け取ったパケットを[ A ] から [ ~ ] までに文字になおせる奴はなおすっていう機能も
追加しました。
Usage:python tpc.py (<PROTO> or 'PL' ) ( '-SC' or '-RAW' )
です!!!
PROTOは絶対必要で、 -SCにすると、Scapyで表示してくれます。デフォルトだと 生のパケットを
そのまま出力します。まぁーやってみてください。
from socket import * #from AlPRO import AlPro import sys from scapy.all import Ether def AlPro(): with file("/usr/include/linux/if_ether.h") as pc: Arr = {} for line in pc: if line.startswith("#define"): Va = line.split() if len(Va) > 2: Arr[Va[1]] = Va[2] else: continue return Arr capture_start = lambda proto: AlPro()[proto] hexchr = lambda x: chr(int(x,16)) """ WTF CODE def capture_start(proto): #AlPro().keys() v = AlPro().keys().index(proto) return AlPro().values()[v] """ #print capture_start("ETH_P_IP") def main(): STR ="" FLAG = 0 if len(sys.argv) != 3: print "Usage:python tpc.py (<PROTO> or 'PL') (-SC or -RAW)\n" print "PROTO: example ... ETH_P_IP , ETH_P_ARP or ETH_P_ALL.etc look at PL" print "PL:PL means ProtoList. U can read Proto's List. Should check" exit(0) elif sys.argv[1] == "PL": for i in AlPro(): print i print print '"ETH_P_IP or ETH_P_ALL" is famous...' exit(0) elif len(sys.argv) == 3: if sys.argv[1] not in AlPro().keys(): print "Oh...look at PL..." print "Let's python tpc.py PL" exit(0) # int(hex(2048)[2:],16) if sys.argv[2] == ("-SC" or "SC"):FLAG = 1 PROTO = int(capture_start(sys.argv[1])[2:],16) s = socket(PF_PACKET, SOCK_RAW,PROTO) s.bind(("eth1",PROTO)) while True: p = s.recv(0x800) pl = len(p) if FLAG: SCAPACKET = Ether(p) print SCAPACKET.show2() print "-"*50 continue f = lambda q,w: ":".join(["%02x" % ord(x) for x in q[w:w+6]]) src = f(p,0) dst = f(p,6) ty = ntohs(ord(p[12:13])) print"%s > %s, ethertype %04x, length %d"%(src,dst,ty,pl) print "\t", for i in xrange(0,pl,2): print"%02x%02x"%(ord(p[i]),ord(p[i+1])), STR += "%02d %02d "%(ord(p[i]),ord(p[i+1])) if i % 16 == 14: STR = STR.split() STR2='' for j in STR: if '40' < j < '7F': STR2+=hexchr(j) else: STR2+='.' print "|"+STR2+"\n\t", STR = '' print "\t\t|" if __name__ == '__main__': main()
あっ eth_p.py は一緒にしてしまいました。
こんな感じになります!!
どうだ!!www