Sorry, het is een icmp implementatie, afgeleid van een implementatie voor het ping commando. Een udp-ping werkt (om onbekende reden) niet; dit kan aan het apparaat liggen dat ik 'ping' en daar heb ik geen invloed op; ik heb het geprobeerd op poort 7.
In hele grove lijnen (dit is geen een letterlijke kopie):
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| struct sock_addr_in addr[MAX];
struct protoent *proto;
int fd[MAX];
fd_set rfds;
uint8_t buffer[128];
// send a ping message on each socket
for(cnt=0;cnt<MAX;cnt++)
{
proto=getprotobyname("icmp");
fd[cnt]=socket(PF_INET,SOCK_RAW,proto->p_proto);
create_ping_message(buffer);
send_ping_message(fd[cnt],addr[cnt],buffer); // uses sendto
FD_SET(fd[cnt],&rfds)
// sleep(1);
}
select(.......);
for(cnt=0;cnt<MAX;cnt++)
{
if(FD_ISSET(fd[cnt],&rfds)
{
// read data here using recv
}
}
sleep(5); |
Het hele verhaal hierboven gaat in een eindeloze loop. Alle adressen in
addr kunnen hetzelfde zijn (hoeft niet). Uiteraard kan het wat netter geprogrammeerd worden door bij te houden welk adres al geping'ed is; de vraag is echter waarom ik op iedere socket hetzelfde antwoord krijg.
Als ik de
sleep(1) toevoeg, gaat het wel goed, dan zie ik op iedere socket een ander sequence nummer. Oeps, misschien moet ik wel flushen omdat ik raw sockets gebruik? Effe proberen
edit:
Hoe flush je een socket
Shame shame shame
edit:
Volgende keer zelf even de taal aangeven in je code block

Zie ook de FAQ over het plaatsen code
Scheelt ook weer een typfoutje namelijk. 'icmp" != "icmp"
[
Voor 14% gewijzigd door
drm op 27-05-2003 13:25
. Reden: [code=c] ;) ]