Toon posts:

PC BOOTEN met wol via router linux

Pagina: 1
Acties:

Verwijderd

Topicstarter
hey,
ik heb hier een pc die apart dient als een proxy.
ik wil nu graag dat mijn router kijkt of die pc meer als 10 uit staat en indien dat dat zo ishem dan aan zet (hij heeft een netwerk kaart met WOL)
weet iemand hoe dit gaat??
de router draaid suse 6.4

  • Predator
  • Registratie: Januari 2001
  • Laatst online: 16:57

Predator

Suffers from split brain

Op zaterdag 23 maart 2002 19:10 schreef icekiller het volgende:
hey,
ik heb hier een pc die apart dient als een proxy.
ik wil nu graag dat mijn router kijkt of die pc meer als 10 uit staat en indien dat dat zo ishem dan aan zet (hij heeft een netwerk kaart met WOL)
weet iemand hoe dit gaat??
de router draaid suse 6.4
Shell scriptje voor schrijven.
Crontab'n elke vb 10 mins.
Je script gewoon laten ping uitvoeren op zijn ip.
Krijgt ie niets terug -> magic packet (wake up) laten versturen.
Krijg je wel reply doe je niets.

Everybody lies | BFD rocks ! | PC-specs


Verwijderd

Topicstarter
en is er iemand die dat is zou willen doen voor deze linux n00b :)

  • Predator
  • Registratie: Januari 2001
  • Laatst online: 16:57

Predator

Suffers from split brain

Op zaterdag 23 maart 2002 20:30 schreef icekiller het volgende:
en is er iemand die dat is zou willen doen voor deze linux n00b :)
Die script is niets, een magic packet prog voor linux vinden zal wel meer werk zijn
code:
1
ping -c 1 [IP] || [wakeup_command]

Uitleg: als ping echo terug krijgt is de exit status 0 en zal hij [wakeup_command] niet doen.
Krijgt ping niets terug dan geeft exit status > 0 en dan doet die [wakeup_command].

|| zorgt daarvoor.

Die [wakeup_command] is dan de syntax voor dat magic packet naar die pc te versturen.

en dan zet je die script in een crontabje
doe maar es:
code:
1
man crontab

;)

Met crontab kan je iets om de x tijd laten uitvoeren.
Dus die script om de zoveel mins.

Everybody lies | BFD rocks ! | PC-specs


Verwijderd

Topicstarter
code:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
*/ 


#include <ctype.h> 
#include <stdio.h> 
#include <string.h> 
#include <unistd.h> 
#include <errno.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 


u_char magicpacket[500]; 


int get_magicpacket(unsigned char *,char *); 
int main(int,char *[]); 


int get_magicpacket(packet,arg) 


unsigned char *packet; 
char *arg; 


{ 
      unsigned char ether_addr[6]; 
      int dstaddr[6]; 
      int i; 
      int j; 
      int k; 
      char *a; 


      for (a = arg; *a; a++) 
            if (*a != ':' && !isxdigit(*a)) { 
                fprintf(stderr, "MAC address must be given in 
hex! [00:11:22:33:44:55]\n"); 
                exit(2); 
            } 


      k = sscanf(arg, "%2x:%2x:%2x:%2x:%2x:%2x", 
            &dstaddr[0], &dstaddr[1], &dstaddr[2], &dstaddr[3], 
&dstaddr[4], &dstaddr[5]); 


      if (k != 6) { 
            fprintf(stderr, "Invalid MAC address! 
[00:11:22:33:44:55]\n"); 
            exit(2); 
      } 


      for (i = 0; i < 6; i++) 
            ether_addr[i] = dstaddr[i]; 


      memcpy(packet, ether_addr, 6); 
      packet[6] = 0x00; 
      packet[7] = 0x74; 
      j = 8; 


      memset(packet+j, 0xff, 6); 
      j += 6; 


      for (i = 0; i < 16; i++) { 
            memcpy(packet+j, ether_addr, 6); 
            j += 6; 
      } 


      packet[111] = 0x40; 
      packet[112] = 0x00; 
      packet[113] = 0x90; 
      packet[114] = 0x90; 
      packet[115] = 0x40; 
      packet[116] = 0x00; 


      j += 6; 


      return j; 
} 





int main(argc,argv) 


int argc; 
char *argv[]; 


{ 


      struct sockaddr_in client, server; 
      int one = 1; 
      int packetsize; 
      int s; 
      int i; 


 if (argc < 2) { 
  fprintf(stderr, "Usage: %s xx:xx:xx:xx:xx:xx\n", argv[0]); 
  exit(1); 
 } 


      packetsize = get_magicpacket(magicpacket, argv[1]); 


      if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 
            perror("socket"); 


      if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&one, 
sizeof(one)) < 0) 
            perror("setsockopt"); 


      server.sin_family = AF_INET; 
      server.sin_port = 0; 
      server.sin_addr.s_addr = INADDR_ANY; 


      client.sin_family = AF_INET; 
      client.sin_port = 32768+666; /* invalid port */ 
      client.sin_addr.s_addr = INADDR_BROADCAST; 


      if (bind(s, (struct sockaddr *)&server, sizeof(server)) < 0) 
            perror("bind"); 


      if ((i = sendto(s, magicpacket, packetsize, 0, (struct sockaddr 
*)&client, sizeof(client))) < 0) 
            perror("sendto"); 


      close(s); 


      return 0; 


} 



<----------------------snip-----------------------> 



--

bedul je deze magic packet code?

http://www.scyld.com/expert/wake-on-lan.html
daar staat ook zo een prog op kan iemand dit voor mij inelkaar steken :(

  • Demo
  • Registratie: Juni 2000
  • Laatst online: 20-08 14:26

Demo

Probleemschietende Tovenaar

Volgens mij kan je dat gewoon met Linux compilen... :?
Ben ook maar een Linux-n00b, maar volgens mij heb ik dat in mijn schoolboek gezien... :P

Unix doesn't prevent a user from doing stupid things, because that would necessarily prevent them from doing brilliant things.
while true ; do echo -n "bla" ; sleep 1 ; done


Verwijderd

Volgens mij is dat gewoon een kwestie van die code in een bestand zetten, gcc -o wol bestand en daarna chmod a+x wol en het laten uitvoeren :? ;)

Verwijderd

Topicstarter
maar heeft het dan ook die timer?

  • Qman
  • Registratie: November 2000
  • Laatst online: 31-07-2021

Qman

Tha Lup

Maar vervolgens zit je met nog een probleem. Namelijk dat het ook kan gebeuren dat je pc vastloopt, of je tcp/ip stack onderuit sodemietert. Het heeft dan namelijk geen enkele zin om een WOL packet te sturen, omdat je Ethernet controller "ziet" aan zijn ACPI interface dat de ACPI al actief is, en hij die dus niet kan (mag) of zal activeren, waardoor er een boot zal plaatsvinden.

Dus, als je het aan de praat krijgt (ik heb misschien wel nog iets dergelijks liggen voor een Win32 kernel), zal het nog niet 100% waterproof zijn.

Stuur ff een mailtje voor de Win-versie, als je die nodig hebt.

Verwijderd

Op zaterdag 23 maart 2002 23:45 schreef icekiller het volgende:
maar heeft het dan ook die timer?
Die timer moet je zelf instellen, dat gcc commando zet alleen de bovenstaande broncode om in een uitvoerbaar programma.

crontab -e geeft een editor waar je die 'timer' kunt instellen. Een regel als:
code:
1
0 8 * * * /path/naar/programma

zou '/path/naar/programma' elke ochtend om 8 uur uitvoeren, zie man crontab voor meer info :)

Verwijderd

Topicstarter
dus ik maak een map /usr/icekiller/wolscript
daar zet ik die script in compile die en dan crontab -e dan komt dat prog op zet ik 0 8 * * * /usr/icekiller/wolscript
zo ofwat??

Verwijderd

Op zondag 24 maart 2002 00:41 schreef icekiller het volgende:
dus ik maak een map /usr/icekiller/wolscript
daar zet ik die script in compile die en dan crontab -e dan komt dat prog op zet ik 0 8 * * * /usr/icekiller/wolscript
zo ofwat??
Ja, dat klopt, behalve dan dat je een map (bah, lijkt wel een windowswoord) niet kunt executen ;)
Als je nu die bovenstaande broncode in een file wolscript.c zet, en dan gcc -o /usr/icekiller/wolscript /home/icekiller/wolscript.c uitvoert, dan kun je die regel van jou precies zo gebruiken :)

Voor de duidelijkheid, dat wolscript wordt dan aangeroepen om 8 uur 's ochtends, elke dag.

  • ScuL
  • Registratie: Januari 2000
  • Laatst online: 13:57
Dit progje kun je gebruiken voor de magicpacket.
(heb het zelf ook gebruikt op mijn SuSE 6.4 router)

http://gsd.di.uminho.pt/jpo/software/wakeonlan/

ProMods ETS2 uitbreiding - Mijn tijdszone is UTC+13


Verwijderd

Topicstarter
en hoe de timer? :)

  • Predator
  • Registratie: Januari 2001
  • Laatst online: 16:57

Predator

Suffers from split brain

Op zondag 24 maart 2002 01:34 schreef icekiller het volgende:
en hoe de timer? :)
Kijk die code steek in je een .c file compile die zoals gezegd met gcc.
Save die code bv in wakeup.c
Dan doe je
code:
1
gcc -o wakeup wakeup.c

Dan
code:
1
chmod 700 wakeup

Dan zet je
code:
1
ping -c 1 [IP] || wakeup [mac proxy pc]

in bv wakeup.sh
Dan
code:
1
chmod 700 wakeup.sh

Die timer is met crontab.
Je kan crontab instellen dat ie op een bepaald tijdstip iets uitvoert.
Zoals sharpe zei
bv elke 10 minuten zou dit zijn :
code:
1
*/10 * * * * /home/icekiller/wakeup.sh

Gaat die script om de 10 minuten uitvoeren.

Everybody lies | BFD rocks ! | PC-specs

Pagina: 1