Op donderdag 25 april 2002 08:01 schreef Neptunus het volgende:
met apr -a krijg ik alleen de gegevens van de kaarten in de server en met het comando wat deadinspace poste kan ik er wil achterkomen.
Als je een packet het (ethernet) netwerk opstuurt, dan is een destination IP adres niet voldoende; in het ethernet frame moet ook het mac-adres staan waar het heen moet. Het mac-adres van de computer waar het heen moet wordt door de kernel achterhaald door een arp-request het netwerk op te sturen.
Omdat het inefficient is om voor elke packet een arp-request te doen, houdt de kernel een lijstje bij van IP-adressen en de bijbehorende mac-adressen: de arp-tabel.
Met 'arp', 'arp -a' of 'arp -n' krijg je de kernel arp-tabel te zien. Waarom dit met mijn regel wel werkte en die van Leon niet is omdat ik een ping naar de computer in kwestie doe voordat ik de arp-tabel opvraag.
Als je nog geen packets naar een computer hebt verstuurd, dan zal die computer ook nog niet in de arp-tabel staan. Met die ping zorg ik ervoor dat de kernel het mac-adres van die compu opzoekt (zodat hij er ping-packets naartoe kan sturen), en dat hij dus in de arp-tabel komt te staan.
Deadinspace zou jij eens een download kunnen posten waar ik z'n scriptje kan ophalen.
Schrijf ik gewoon zelf...
Je kunt btw kijken naar 'arping', das een progje a la ping, maar dat laat ook het mac-adres zien, en kan ook op mac-adres pingen (alleen zijn 'arp' en 'ping' standaard wel aanwezig, en 'arping' waarschijnlijk niet).
Ik ben en blij een beetje een newbey met linux maar krijg er steeds meer greep op en dat vind ik cool!
Dat is inderdaad leuk ja, als je het door begint te krijgen

Daarom liet ik je ook zoveel mogelijk zelf aanmodderen... Dan begrijp je ook nog wat je doet.
Ik heb gewoon een file aangemaakt met pico en ben een begonnen met schrijven. Ik heb eigen een install script van een firewall bekeken en daar veel info uitgehaald.
En dat is de manier om dingen te leren
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
| #script was written by neptunus
clear
echo -e "\033[3;035m...........................................................$
echo " "
echo " Welcome to the Physical address Finder $
echo -e "\033[3;035m...........................................................$
echo ""
# WELL ARE YOU ROOT?
if [ "$UID" != "0" ]
then
echo "Nice Try, The script must be run as root"
echo ""
exit 1
fi
### ASK FOR INTERFACE
echo ""
echo -e "\033[3;035m...........................................................$
echo " "
echo " What is your Interface you wish to find the physical address of?"
echo -e "\033[3;035m...........................................................$
echo ""
printf "IP adres of Interface: "
read ADDRESS
echo ""
ping -c 1 "$ADDRESS" > /dev/null; arp -n | grep "$ADDRESS" |
Ok, een paar dingen

Als je de file executable maakt (ik neem aan dat je weet wat dat inhoudt en hoe dat moet), dan kun je hem ook starten met ./scriptje (waar 'scriptje' de filenaam is), of met 'scriptje', als hij in een directory staat die in je path staat (/usr/local/bin is goede kandidaat).
Verder beginnen scripts (text-format executables) doorgaans met een regel comment, met daarop voor welke 'taal' het script geschreven is.
Als je de file namelijk met ./scriptje opstart, dan wordt scriptje namelijk aan de kernel gegeven, zo van 'hier, voer eens uit'. Maar de kernel kan niks aanvangen met die text... Dus wat doet de kernel? Die voert scriptje weer aan /bin/bash (als het een bash-script is), of aan /usr/bin/perl (als het een perl-script is), enz... Maar dan moet de kernel wel kunnen bepalen aan welke interpreter hij scriptje moet voeren.
Dat doe je dus door op de eerste regel "#!interpreter" te zetten, waarbij 'interpreter' het programma is waar het aan gevoerd moet worden.
Jouw scriptje is een bash-scriptje (of eventueel sh), dus de eerste regel zou dan "#!/bin/bash" moeten zijn.
Dan over de inhoud van het scriptje...
Dit was eigenlijk niet wat ik bedoelde

Wat ik bedoelde met 'een scriptje schrijven' was iets maken (waarschijnlijk gewoon een one-liner op je prompt) dat alle IPs op je netwerk scant en daarvan de mac-adressen achterhaalt en teruggeeft... zoiets:
code:
1
2
| [root@galileo marcelm]# for I in $(nmap -sP 131.155.193.* | grep 'appears to be up' | cut -d '(' -f 2 | cut -d ')' -f 1);
do ping -c1 ${I} > /dev/null; echo -n "${I} "; arp -n | grep "${I} " | awk '{print $3}'; done |
met als output
code:
1
2
3
4
5
6
7
8
| 131.155.193.11 08:00:09:91:08:C4
131.155.193.12 08:00:09:91:B4:31
131.155.193.13 00:10:83:35:8F:56
131.155.193.14 08:00:09:13:CD:07
131.155.193.15 08:00:09:1B:5E:2F
131.155.193.20 00:10:83:B9:4A:80
131.155.193.26 00:01:02:3D:EA:10
<enz> |
Ik heb ivm layout-verneukerij een enter geplaatst midden in de regel, maar de bedoeling is dat dit één regel is.
Ik heb nu geen zin om hem nu helemaal uit te leggen, dus kijk er zelf maar eens naar...
Tip: probeer hem op te breken in kleinere stukken, dan kun je van die stukken bepalen wat ze doen. hint: probeer
code:
1
2
3
4
| for I in bla bla mooh; do echo ${I}; done
for I in *; do echo ${I}; done
uname -a
for I in $(uname -a); do echo ${I}; done |
Er is allee nog een ding met he script het werkt alleen nog maar intern en niet buiten het gewonen netwerk via internet naar buiten?? Misschien een domme vraag maar kan dat ook ?
Nee, dat kan niet.
Er hoeft alleen maar het macadres van de computer die fysiek aan hetzelfde ethernet netwerk hangt in het ethernet-frame te staan.
Als jij een packet naar internet stuurt, dan staat in het ethernet frame waar dat packet in zit het macadres van jouw gateway, niet van de computer op internet waar je naartoe wil. De ethernet hardware snapt dan waar dat packet naartoe moet (namelijk naar jouw gateway), en de gateway (waar het packet aanbeland) zoekt dan weer verder uit waar dat ding heen moet.
Hierdoor komen er dus alleen maar de macadressen van de computers op hetzelfde ethernet-netwerk als jouw computer in je arp tabel.