рд╣рдо рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкрд╛рдЧрд▓ рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕реНрдирд┐рдлрд░ рдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ



рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП: рд╣рдо рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рдФрджреНрдпреЛрдЧрд┐рдХ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХрд╛ рдвреЛрдВрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореЗрд░рд╛ рдХреЛрдб рднрдпрд╛рдирдХ, рдбрд░рд╛рд╡рдирд╛ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рднреА - рд╕рдкреНрддрд╛рд╣ рдХреЗ рдордзреНрдп рдореЗрдВ рдкреИрдХреЗрдЯ рдХреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдП? рддреЛ, рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗред

рдЗрд╕рд▓рд┐рдП рдЖрдЬ рд╣рдо рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗ:

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 *) &eth, data, sizeof(struct ethhdr)); 


рд╣рдореНрдо ... рдФрд░ рдЖрдк рдЗрд╕реЗ рдкрд╛рдпрдерди рдореЗрдВ рдХреИрд╕реЗ рдбрд╛рд▓рддреЗ рд╣реИрдВ?

рд╕рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рд╣рдо рд╕рднреА рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рд╣реЛрддреА рд╣реИред рдЬрдирд░реЗрдЯрд░ / рдЗрдЯрд░реЗрдЯрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рд╣рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ __iter __ () рд╡рд┐рдзрд┐ рд╣реЛ рдФрд░ рдЖрдЧреЗ () рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЦреЗрддреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ - рдЖрдЧреЗ рд╢реВрдиреНрдп рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИред
 PyTypeObject PyPacketGenerator_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "packgen", /* tp_name */ sizeof(PacketGeneratorState), /* tp_basicsize */ 0, /* tp_itemsize */ (destructor)packgen_dealloc, /* tp_dealloc */ 0, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ 0, /* tp_reserved */ 0, /* tp_repr */ 0, /* tp_as_number */ 0, /* tp_as_sequence */ 0, /* tp_as_mapping */ 0, /* tp_hash */ 0, /* tp_call */ 0, /* tp_str */ 0, /* tp_getattro */ 0, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT, /* tp_flags */ 0, /* tp_doc */ 0, /* tp_traverse */ 0, /* tp_clear */ 0, /* tp_richcompare */ 0, /* tp_weaklistoffset */ PyObject_SelfIter, /* tp_iter */ (iternextfunc)packgen_next, /* tp_iternext */ 0, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ 0, /* tp_init */ PyType_GenericAlloc, /* tp_alloc */ packgen_new, /* tp_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'}


рдорд╕реНрддреА рдХреЗ рд▓рд┐рдП, рдЬреАрдердм рдкрд░ рдПрдХ рднрдВрдбрд╛рд░ рдмрдирд╛рдпрд╛, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реВрдБрдШрдирд╛ рд╣реИ, рдкрдХрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ!

Source: https://habr.com/ru/post/In142816/


All Articles