
рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП: рд╣рдо рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рдФрджреНрдпреЛрдЧрд┐рдХ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХрд╛ рдвреЛрдВрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореЗрд░рд╛ рдХреЛрдб рднрдпрд╛рдирдХ, рдбрд░рд╛рд╡рдирд╛ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рднреА - рд╕рдкреНрддрд╛рд╣ рдХреЗ рдордзреНрдп рдореЗрдВ рдкреИрдХреЗрдЯ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдП? рддреЛ, рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗред
рдЗрд╕рд▓рд┐рдП рдЖрдЬ рд╣рдо рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗ:
1. рд╣рдо рдЯреАрд╕реАрдкреА рдФрд░ рдпреВрдбреАрдкреА рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдкреИрдХреЗрдЯ рд╕реНрдирд┐рдлрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ
2. рдЗрд╕реЗ рдкрд╛рдпрдерди рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реА-рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдбрд╛рд▓реЗрдВ
3. рд╣рдо рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдЯрд░реЗрдЯрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдмрд╛рдЗрдЯреНрд╕ рдХреЙрд░реНрдиреБрдХреЛрдкрд┐рдпрд╛ рдХреА рддрд░рд╣ рдмрд┐рдЦрд░реЗ рд░рд╣реЗрдВ
4. ...
5. рд▓рд╛рдн!
рдпрд╣ рд╕рдм рдХреНрдпреЛрдВ рдЬрд░реВрд░реА рд╣реИ?
рд╣рдореЗрдВ рд╕реНрдирд┐рдлрд░реНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд┐рдХ рд╕реВрдБрдШрдиреЗ рдХреЗ рд▓рд┐рдПред рдирд╣реАрдВ, рдореИрдВ рдордЬрд╛рдХ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЕрдВрдЧреНрд░реЗрдЬреА рдХреНрд░рд┐рдпрд╛ "рд╕реВрдВрдШрдиреЗ рдХреЗ рд▓рд┐рдП" рдХрд╛ рдЕрдиреБрд╡рд╛рдж "рд╕реВрдВрдШрдирд╛" рд╣реИред рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд╣реЛрдВрдЧреЗ - рдЙрдирдХреА рдорджрдж рд╕реЗ, рдЖрдкрдХреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрдирд╛рдЗрдкрд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдФрд░ рд╕рдХреНрд░рд┐рдп рд╣реИрдВред рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реНрдирд┐рдлрд░ рдареАрдХ рдФрд░ рдХреЗрд╡рд▓ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ? рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдХреНрд░рд┐рдп рд╕реНрдирд┐рдлрд░ рди рдХреЗрд╡рд▓ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЙрди рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЖрдВрдЦреЛрдВ рдХреЛ рдЪреБрднрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рд╣реИред рд╡рд╣ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдПрдЖрд░рдкреА-рд╕реНрдкреВрдлрд┐рдВрдЧ рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЧрдВрджреЗ рдЪрд╛рд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рд╡реИрд╕реЗ, рдЧреИрд░-рд╕реНрд╡рд┐рдЪ рдХрд┐рдП рдЧрдП рдиреЗрдЯрд╡рд░реНрдХ (рд░рд┐рдкреАрдЯрд░реНрд╕ рдФрд░ рд╣рдм рдХреЗ рдЖрдзрд╛рд░ рдкрд░), рдПрдХ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реНрдирд┐рдлрд░ рдЕрдЪрд╛рдирдХ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╕реБрдкрд░рдкрд╛рд╡рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдРрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рд╕рднреА рдкреИрдХреЗрдЯ рд╕рднреА рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдХреЗрд╡рд▓ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди ... :)
рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдХреЛ рдЕрдкрдиреЗ рдирд┐рдЬреА рд╕рдЪрд┐рд╡ рдХреЛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдкрддреНрд░рд╛рдЪрд╛рд░ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкрдврд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рд░реВрдк рд╕реЗ, рдЗрд╕реЗ "
рдкреНрд░реЛрдорд┐рд╕рд╕ рдореЛрдб " рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд "
рдЕрдХреНрд╖рдо рдореЛрдб "ред рдФрд░ рдПрдХ рдШрд╛рдд рд╣реИ:

рд╣рд╛рдВ, рдХрд╛рд░реНрдб рдХреЛ рдЬрд░реВрд░реА рдореЛрдб рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдкрд░рдорд┐рд╢рди рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдЧреАред рдРрд╕реА рдмрд╛рддреЗрдВред
рддреЛ рдХреНрдпрд╛?
рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рдлрд┐рд▓реНрдо рдЪрд░рд┐рддреНрд░ рдиреЗ рдХрд╣рд╛, "рд╣рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред" рдпрд╣реА рд╣реИ, рд▓рд┐рдВрдХ рдкрд░рдд рдкрд░, рдУрдПрд╕рдЖрдИ рдкрд░рддреЛрдВ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЧреЛрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реЙрдХреЗрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ
PF_INET рдХреЗ рдмрдЬрд╛рдп рдирд┐рд░рдВрддрд░
PF_PACKET рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
int s_sock; struct ifreq ifr; strcpy(ifr.ifr_name, IFACE); if ( (s_sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0) { perror("Error creating socket"); exit(-1); } ifr.ifr_flags |= IFF_PROMISC; if (ioctl(s_sock, SIOCGIFFLAGS, &ifr) < 0) { perror("Unable to set promiscious mode for device"); close(s_sock); exit(-1); }
рдЖрдорддреМрд░ рдкрд░, рдЬрдм рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реЙрдХреЗрдЯ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрд╡рд░реЛрдзрди рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдирд┐рд░рдВрддрд░
ETH_P_ALL рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ - рд╕рдм рдХреБрдЫ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
Ifreq рд╕рдВрд░рдЪрдирд╛
рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рд┐рдирдХреНрд╕
рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ ioctl () рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
IFACE рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рджреЗрдЦрдиреЗ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
"eth0" ред
рджрд░рдЕрд╕рд▓, рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣реА рд╕рдм рдХреБрдЫ рд╣реИ рдХрд┐ рд╣рдо рд▓реВрдк рдореЗрдВ рд╕реЙрдХреЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
int n = 0; char buf[MTU]; n = recvfrom(s_sock, buf, sizeof(buf), 0, 0, 0);
рдпрд╣рд╛рдВ рдПрдордЯреАрдпреВ 1500 рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ - рдпрд╣
рдИрдерд░рдиреЗрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдорд╛рдирдХ рдЕрдзрд┐рдХрддрдо рдкреИрдХреЗрдЯ рдЖрдХрд╛рд░ рд╣реИред рдПрдХ рдФрд░ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рд░реНрдорд┐рдд рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдПрдлрдбреАрдбреАрдЖрдИ , рдорд╛рди рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╣рдо
рдИрдерд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рдкреИрдХреЗрдЯ рдХреЗ рд╣реЗрдбрд░ рдкрд░ рдбреЗрдЯрд╛
рдХрд░реНрдиреЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ -
рдПрдереЗрд░рдб ред рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рд▓реЗрдпрд░ рддрдХ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреЗрд╕рд┐рдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛рдПрдБ рд╣реИрдВ, рдЬреЛ рдЪрд╛рд╣реЗ рдХрд┐рддрдиреА рднреА рдХрдард┐рди
рдХреНрдпреЛрдВ рди рд╣реЛрдВ ,
рдЙрдиреНрд╣реЗрдВ iphdr ,
tcphdr рдпрд╛
udphdr рдХреА рддрд░рд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, "рдореБрдЭреЗ
HDP рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рдордЬрд╝рд╛рдХ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рд╕реЗ рдирд╣реАрдВ рдХрд┐ рдпрд╣ рдЖрдк рддрдХ рдкрд╣реБрдБрдЪреЗрдЧреАред ")ред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рд╕реА рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд░рддрд╛ рд╣реИ:
struct ethhdr eth; memcpy((char *) ð, data, sizeof(struct ethhdr));
рд╣рдореНрдо ... рдФрд░ рдЖрдк рдЗрд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдХреИрд╕реЗ рдбрд╛рд▓рддреЗ рд╣реИрдВ?
рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рд╣рдо рд╕рднреА рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рд╣реЛрддреА рд╣реИред рдЬрдирд░реЗрдЯрд░ / рдЗрдЯрд░реЗрдЯрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рд╣рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ
__iter __ () рд╡рд┐рдзрд┐ рд╣реЛ рдФрд░
рдЖрдЧреЗ () рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЦреЗрддреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ - рдЖрдЧреЗ рд╢реВрдиреНрдп рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИред
PyTypeObject PyPacketGenerator_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "packgen", sizeof(PacketGeneratorState), 0, (destructor)packgen_dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, Py_TPFLAGS_DEFAULT, 0, 0, 0, 0, 0, PyObject_SelfIter, (iternextfunc)packgen_next, 0, 0, 0, 0, 0, 0, 0, 0, 0, PyType_GenericAlloc, packgen_new, };
рдпрд╣ рдШреЛрд╖рдгрд╛ рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рднрд╡рд┐рд╖реНрдп рдХреА рд╡рд╕реНрддреБ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ
packgen_new () ,
packgen_next (), рдФрд░
packgen_dealloc () рд╣реИрдВ ред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдПрдХ рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдореГрддрд┐ рдореЗрдВ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╡рд░реНрддрдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рд╕реЙрдХреЗрдЯ рд╣реИ, рд╣рдо рдЗрд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ:
typedef struct { PyObject_HEAD int s_sock; } PacketGeneratorState;
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рдХрд╣рд╛ рдерд╛, рдЖрдкрдХреЛ рд╕реЙрдХреЗрдЯ рдЦреЛрд▓рдиреЗ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдХреЛ рдЬрд╛рд╕реВрд╕ рдореЛрдб рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╕реАрдзреЗ рд╡рд╕реНрддреБ рдЖрд░рдВрднреАрдХрд░рдг рд╡рд┐рдзрд┐ рдореЗрдВ рд╣реИред
static PyObject * packgen_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) { int s_sock; struct ifreq ifr; strcpy(ifr.ifr_name, IFACE); if ( (s_sock = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0) { perror("Error creating socket"); exit(-1); } ifr.ifr_flags |= IFF_PROMISC; if (ioctl(s_sock, SIOCGIFFLAGS, &ifr) < 0) { perror("Unable to set promiscious mode for device"); close(s_sock); exit(-1); } PacketGeneratorState *pkstate = (PacketGeneratorState *)type->tp_alloc(type, 0); if (!pkstate) return NULL; pkstate->s_sock = s_sock; return (PyObject *)pkstate; }
рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреА рд╡рд╛рдкрд╕реА рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдлреА рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди
рдореИрдВ рдЗрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдФрд░ рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ
рдореЗрдВ рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛ (рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рд░реАрдореЗрдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)ред рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ рд╡рд╣ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрддрд░ рдкрд░
рдЖрдИрдкреА рд╣реИ, рдФрд░ рдЖрдИрдкреА-рд╣реЗрдбрд░ рджреНрд╡рд╛рд░рд╛, рдмрджрд▓реЗ рдореЗрдВ, рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ (рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рд╕рдВрдХреЗрддрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░
/ etc / рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ)ред рдпрд╣ рд╕рдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкреИрдХреЗрдЬ рдмрд░реНрдЧрд░ рдХрд┐рдВрдЧ рд╢реЗрдл рдХреА рд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ - рдкреНрд░рддреНрдпреЗрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖рдХ рдХреЛ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рднрд╛рдЗрдпреЛрдВ рдХреЛ рд▓реЗрдВ -
рдЯреАрд╕реАрдкреА рдФрд░
рдпреВрдбреАрдкреА ред
PyObject *packet; packet = PyDict_New(); if (!packet) return NULL; if (ntohs(eth.h_proto) == ETH_P_IP) { ip = (struct iphdr *)(data + sizeof(struct ethhdr)); PyDict_SetItemString(packet, "ip_source", PyString_FromFormat("%s", inet_ntoa(ip->saddr))); ... if ((ip->protocol) == IPPROTO_TCP) { tcp = (struct tcphdr *)(data + sizeof(struct ethhdr) + sizeof(struct iphdr)); PyDict_SetItemString(packet, "tcp_source_port", PyString_FromFormat("%d", ntohs(tcp->source))); ... } if ((ip->protocol) == IPPROTO_UDP) { udp = (struct udphdr *)(data + sizeof(struct ethhdr) + sizeof(struct iphdr)); PyDict_SetItemString(packet, "udp_source_port", PyString_FromFormat("%d", ntohs(udp->source))); ... } } return packet;
рджреЗрдЦрд╛!
рдпрд╣ рд╕рдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
Python 2.7.3 (default, Apr 20 2012, 22:44:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pysniff
>>> for i in pysniff.packgen():
... print i
...
{'ip_destination': '192.168.1.111', 'tcp_seq': '10972', 'ip_source': '173.194.32.53', 'tcp_offset': '8', 'tcp_source_port': '443', 'tcp_dest_port': '44021'}
{'ip_destination': '173.194.32.53', 'tcp_seq': '47475', 'ip_source': '192.168.1.111', 'tcp_offset': '8', 'tcp_source_port': '44021', 'tcp_dest_port': '443'}
{'ip_destination': '192.168.1.111', 'tcp_seq': '10972', 'ip_source': '173.194.32.53', 'tcp_offset': '8', 'tcp_source_port': '443', 'tcp_dest_port': '44021'}
{'ip_destination': '173.194.32.53', 'tcp_seq': '47475', 'ip_source': '192.168.1.111', 'tcp_offset': '8', 'tcp_source_port': '44021', 'tcp_dest_port': '443'}
рдорд╕реНрддреА рдХреЗ рд▓рд┐рдП,
рдЬреАрдердм рдкрд░ рдПрдХ
рднрдВрдбрд╛рд░ рдмрдирд╛рдпрд╛, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реВрдБрдШрдирд╛ рд╣реИ, рдкрдХрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ!