line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
/* |
2
|
|
|
|
|
|
|
Perl ARP Extension |
3
|
|
|
|
|
|
|
Send the packet |
4
|
|
|
|
|
|
|
Linux code |
5
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
Programmed by Bastian Ballmann |
7
|
|
|
|
|
|
|
Last update: 11.05.2022 |
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
This program is free software; you can redistribute |
10
|
|
|
|
|
|
|
it and/or modify it under the terms of the |
11
|
|
|
|
|
|
|
GNU General Public License version 2 as published |
12
|
|
|
|
|
|
|
by the Free Software Foundation. |
13
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
This program is distributed in the hope that it will |
15
|
|
|
|
|
|
|
be useful, but WITHOUT ANY WARRANTY; without even |
16
|
|
|
|
|
|
|
the implied warranty of MERCHANTABILITY or FITNESS |
17
|
|
|
|
|
|
|
FOR A PARTICULAR PURPOSE. |
18
|
|
|
|
|
|
|
See the GNU General Public License for more details. |
19
|
|
|
|
|
|
|
*/ |
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
#include |
22
|
|
|
|
|
|
|
#include |
23
|
|
|
|
|
|
|
#include |
24
|
|
|
|
|
|
|
#include |
25
|
|
|
|
|
|
|
#include |
26
|
|
|
|
|
|
|
#include |
27
|
|
|
|
|
|
|
#include |
28
|
|
|
|
|
|
|
#include "arp.h" |
29
|
|
|
|
|
|
|
|
30
|
1
|
|
|
|
|
|
int send_packet_linux(const char *dev, u_char *packet, u_int packetsize) |
31
|
|
|
|
|
|
|
{ |
32
|
|
|
|
|
|
|
struct sockaddr addr; |
33
|
|
|
|
|
|
|
int sock; |
34
|
|
|
|
|
|
|
|
35
|
1
|
50
|
|
|
|
|
if(strlen(dev) == 0) |
36
|
|
|
|
|
|
|
{ |
37
|
0
|
|
|
|
|
|
printf("dev is undefined. Terminating.\n"); |
38
|
0
|
|
|
|
|
|
return 0; |
39
|
|
|
|
|
|
|
} |
40
|
|
|
|
|
|
|
|
41
|
1
|
50
|
|
|
|
|
if(packetsize == 0) |
42
|
|
|
|
|
|
|
{ |
43
|
0
|
|
|
|
|
|
printf("packetsize is zero. Terminating.\n"); |
44
|
0
|
|
|
|
|
|
return 0; |
45
|
|
|
|
|
|
|
} |
46
|
|
|
|
|
|
|
|
47
|
|
|
|
|
|
|
// Create socket descriptor |
48
|
1
|
50
|
|
|
|
|
if( ( sock = socket(AF_PACKET, SOCK_PACKET, htons(ETH_P_ALL))) < 0 ) |
49
|
|
|
|
|
|
|
{ |
50
|
0
|
|
|
|
|
|
perror("socket"); |
51
|
0
|
|
|
|
|
|
return 0; |
52
|
|
|
|
|
|
|
} |
53
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
// Set dev and send the packet |
55
|
1
|
|
|
|
|
|
strncpy(addr.sa_data, dev, sizeof(addr.sa_data)); |
56
|
|
|
|
|
|
|
|
57
|
1
|
50
|
|
|
|
|
if( (sendto(sock, packet, packetsize, 0, &addr, sizeof(struct sockaddr))) < 0 ) |
58
|
|
|
|
|
|
|
{ |
59
|
1
|
|
|
|
|
|
perror("send"); |
60
|
1
|
|
|
|
|
|
return 0; |
61
|
|
|
|
|
|
|
} |
62
|
|
|
|
|
|
|
|
63
|
0
|
|
|
|
|
|
close(sock); |
64
|
1
|
|
|
|
|
|
return 1; |
65
|
|
|
|
|
|
|
} |