wm geom .output 309x958+316+76; wm geom .konsola 865x956+638+77; kons_font 13; # Morasko
## hping3 - przechwytywanie pakietow z sieci, 11.2018
# + to nie pkg tcl-a tylko interp z wbudowana cmd hping...
# + opis pol w pakiecie IP: http://www.daemon.org/ip.html
# + zrobic wersje hping3 jako roz.bin. tcl-a, ok!!
# z ktorymi wersjami tclkit-a dziala? 8.4, ???
#
load ./hping3.so; # dodaje cmd hping i ns hping::* !!!
#info load
#% {./hping3.so Hping} {/root/tcl/tclkit8.6b1/lib/tk8.6/../libtk8.6.so Tk} {{} vfs} {{} rechan} {{} tclkitpath} {{} Mk4tcl} {{} Itcl}
proc err args {catch $args err; set err}
err hping q
#% Bad option "q" must be: resolve, send, sendraw, recv, recvraw, setfilter, iflist, outifa, getfield, hasfield, setfield, delfield, checksum, event
join [hping iflist] \n
#% lo 16436 {127.0.0.1} {} {LOOPBACK}
eth0 1500 {192.168.1.3} {192.168.1.255} {BROADCAST}
#% lo 16436 {127.0.0.1} {} {LOOPBACK}
eth0 1500 {150.254.77.44} {150.254.77.255} {BROADCAST}
hping recv eth0
#% {ip(ihl=0x5,ver=0x4,tos=0x00,totlen=84,id=0,fragoff=0,mf=0,df=1,rf=0,ttl=64,proto=1,cksum=0xa742,saddr=192.168.1.3,daddr=212.77.98.9)+icmp(type=8,code=0,id=2908,seq=97)+data(str=?c\0bT\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00)}
hping recv -hexdata eth0
#% ip(ihl=0x5,ver=0x4,tos=0x00,totlen=84,id=0,fragoff=0,mf=0,df=1,rf=0,ttl=64,proto=1,cksum=0xa742,saddr=192.168.1.3,daddr=212.77.98.9)+icmp(type=8,code=0,id=2908,seq=98)+data(hex=caa71a5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)
# 4s czekamy na komunikaty...
#set x [hping recv -hexdata eth0 4000 0]; llength $x
set x [hping recv eth0 4000 0]; llength $x
set x2 {}; foreach e $x {
if {[hping getfield ip ihl $e] != 0} {lappend x2 $e}
}; llength $x2
join $x2 \n---\n
# ...
# proba wyslania ping...
# + co trzeba podac w naglowku IP ? ttl,daddr ??
# + czasami hping recv przechwytuje to co sami wyslalismy...
# + mozna podac adr domenowe w s/daddr
# + najpierw odczytywac pakiety potem na tej podstawie tworzyc wlasne...
hping resolve wp.pl
#% 212.77.98.9
hping send {ip(ttl=25,daddr=212.77.98.9)+icmp(type=8,code=0,id=123)}
set x [hping recv eth0 1000 0]
set x2 {}; foreach e $x {if {[hping getfield icmp id $e]==123} {lappend x2 $e}}
join $x2 \n---\n
#% ip(ihl=0x5,ver=0x4,tos=0x00,totlen=28,id=63221,fragoff=0,mf=0,df=0,rf=0,ttl=25,proto=1,cksum=0x6a90,saddr=150.254.77.44,daddr=212.77.98.9)+icmp(type=8,code=0,id=123,seq=0)
---
ip(ihl=0x5,ver=0x4,tos=0x00,totlen=28,id=19788,fragoff=0,mf=0,df=0,rf=0,ttl=56,proto=1,cksum=0x141b,saddr=212.77.98.9,daddr=150.254.77.44)+icmp(type=0,code=0,id=123,seq=0)
# + jako odp przychodzi icmp(type=0,code=0,id=123)
# hping event, 3.11.2018
# + handler dziala...
# naprawilem segm. fault przy wylaczaniu handlera (script.c)
# handler MUSI wywolywac "hping recv eth0"
# + "-hexdata" zawsze bezpieczniejsze z uwagi na dziwne znaki unicode
#
.output.t delete 1.0 end; # czyszczenie output
hping event eth0 {}; # wylaczanie handlera
set licz 0; hping event eth0 { # wlaczanie handlera
set msg [hping recv -hexdata eth0]
if {[hping getfield ip ihl $msg]!=0} {
_puts "--- $licz\n$msg"; incr licz
}
}
hping send {ip(ttl=5,daddr=212.77.98.9)+icmp(type=8,code=0,id=123)}
# hping setfilter, filtry pcap, 3.11.2018
# + gdzie jest opis tych filtrow ?!
#
hping setfilter eth0 ""; # wyl. filtrowanie
hping setfilter eth0 "icmp"; # przepuszcza tylko prot. icmp
# inne udogodnienia hping...
# + arytmetyka na int dowolnej dlugosci (tcl>=8.5 tez to ma!)
# + cmd/operacje powinny byc w ns hping ?
#
#rename ** hping::**; # jesli uzywac ./hping3 a nie ./hping3.so
hping::** 2 10
#% 1024
hping::** 2 100
#% 1267650600228229401496703205376
hping::** 2 100
#% 1267650600228229401496703205376
expr 2**100; # tcl>=8.5 to ma...
#% 1267650600228229401496703205376
time {hping::** 2 1000}
#% 70 microseconds per iteration
time {expr 2**1000}
#% 60 microseconds per iteration
exit