Puncte:2

Cum se scrie un instrument de descoperire a dispozitivului folosind Bash

drapel ng

Am un PC încorporat care rulează un server Linux și un server web simplu care este folosit în industria agriculturii, clienții mei cumpără aceste PC-uri și le folosesc în domeniile lor. (se instaleaza pe un stalp la 6 sau 7 metri deasupra solului si este foarte greu de accesat) uneori schimbă intervalul adresei IP ale acestor PC-uri de la una originală la propriul interval IP dorit. de exemplu, le trimit cu 192.168.10.10/24, dar l-ar putea schimba în ceva de genul 172.16.12.19/29 sau 10.10.200.10/8 sau ....

problema este că după un timp uită adresa IP a PC-ului și vrem să le oferim un instrument care să detecteze și să le arate adresa IP curentă.

M-am gândit că poate folosirea adresei IP de difuzare și trimiterea unui mesaj prin rețeaua locală ar putea ajuta la rezolvarea acestei probleme. dar după câteva căutări mi-am dat seama că trebuie să cunosc intervalul cel puțin de exemplu (172.16.12.X sau 10.10.200.X) ceea ce nu este posibil pentru mine pentru că fermierii au uitat și gama de rețea. Există vreun instrument precum „NC” în Linux care mă poate ajuta să scriu un script bash pentru a-și găsi IP-ul? Am acces la rețea la computer, dar nu pot conecta un monitor la computer, așa că singura modalitate este să găsesc IP-ul folosind rețeaua locală.

vreau asa ceva:

echo „Care este adresa dumneavoastră IP?” | nc -w1 -u 4545

și am pus ceva pe computer care răspunde la acest mesaj ori de câte ori au primit expresia exactă Care este adresa ta IP? "

nc -l -u -p 4545

dar pentru nc trebuie să specific un interval de rețea care nu este posibil pentru mine.

Editați | ×:

dacă ați lucrat cu instrumentul Device Discovery (DDT) pentru camere IP, știți că acestea vor găsi IP-ul camerei independent de computerul care are DDT-ul pe el. Vreau ceva exact ca acele programe, dar cu comenzi bash.

CrazyTux avatar
drapel us
Sunt acele computere conectate la internet? Sau sunt toți în aceeași rețea locală? În plus, după ce au uitat IP-ul și intervalul de ip, au acces shell la servere?
drapel ng
@CrazyTux sunt conectați doar la lan local, după ce au uitat ip-ul, nu au acces la shell
CrazyTux avatar
drapel us
Există un server la care au acces toate celelalte servere sau cpstumers? Sau există un serviciu smtp pe servere?, cred că pot avea o soluție, să discutăm.
drapel ng
@CrazyTux nu Acești clienți nu au acces unul la altul, aceste PC-uri sunt private pentru fiecare client și au propria lor configurație. din păcate nu au server smtp,
CrazyTux avatar
drapel us
Deci, să spunem că creăm un instrument Device Discovery, dacă nu îl folosesc și își vor uita ip-ul, își vor pierde accesul la computer? sau l-ar putea conecta cumva? dacă vor pierde accesul la computer, instrumentul ar trebui să trimită un mesaj cu ip-ul curent către alt dispozitiv cumva, dacă mai au acces la server după ce își uită ip-ul, atunci îl pot verifica cu `ifconfig. ` este corect sau imi scapa ceva?
sudodus avatar
drapel jp
Este posibil, fără a urca pe stâlpi, să resetați acele dispozitive la „setările din fabrică”, pe care le aveți în evidență? Dacă nu, cred că ar fi de ajutor dacă ai reuși să faci asta posibil.
Unix avatar
drapel cn
Ar putea fi posibil să folosiți aliasuri bash prin ssh? De exemplu: `alias ipa="nc -w1 -u 4545"`, deci nu trebuie să introducă o expresie exactă, doar alias-ul `ipa`.
sancho.s ReinstateMonicaCellio avatar
drapel pl
Ce versiune de Ubuntu rulează?
sancho.s ReinstateMonicaCellio avatar
drapel pl
Este o soluție acceptabilă ca, în loc să obțină o modalitate de a cunoaște noul IP, să recupereze vechiul IP? Dacă da, puteți seta o sarcină crontab care verifică IP-ul curent și, ori de câte ori se abate de la o valoare setată, o schimbă înapoi.
sudodus avatar
drapel jp
`@reboot` sau la un anumit interval? Ar accepta fermierii că nu pot schimba adresa IP singuri, ci trebuie să rămână cu valoarea prestabilită stabilită de compania dumneavoastră și reținută de compania dumneavoastră?
James S. avatar
drapel de
Cum sunt alocate adresele IP acestui dispozitiv încorporat? Static sau DHCP? Cine are acces la LAN la care se conectează aceste dispozitive? se pot uita doar la tabelul ARP de pe router, pot găsi adresa MAC a dispozitivului dvs. încorporat și voila?
James S. avatar
drapel de
netcat (`nc`) este instrumentul greșit de utilizat aici. Ai încercat `nmap`?
Robert Riedl avatar
drapel us
cum obțin alertele sau datele senzorului, dacă uită IP-ul?
drapel ng
@RobertRiedl Senzorii nu sunt conectați prin LAN, sunt conectați prin RS485 și CAN Bus, PC-ul este folosit doar pentru monitorizarea senzorilor
drapel ng
@JamesS. Dragă James, așa cum am spus mai devreme, senzorii sunt conectați folosind magistrala de comunicație serială la computer, nu au nicio conexiune LAN. Aici nu este folosit niciun server DHCP. fermierii conectează PC-ul pe care îl avem cu propriul lor LAPTOP/PC pentru a monitoriza senzorii.
drapel ng
@JamesS. cum să folosești nmap aici?
Robert Riedl avatar
drapel us
Deci, pentru a verifica senzorii, se conectează prin propriul laptop/PC la acest server Ubuntu.. prin SSH/Web (?) la adresa IP? Sau există o aplicație care încarcă datele senzorului pe computerul fermierului? Cel mai bun mod de a ține evidența IP-ului ar fi dacă serverul Ubuntu raportează IP-ul undeva, în mod regulat.
sancho.s ReinstateMonicaCellio avatar
drapel pl
@RobertRiedl - Aceasta face parte din [acest răspuns] (https://askubuntu.com/a/1359269/226614).
Robert Riedl avatar
drapel us
@sancho.sReinstateMonicaCellio te referi la partea „difuzare” a răspunsului tău? Ei bine, da, parțial. Pentru mine, face o diferență dacă utilizatorul trebuie să introducă IP-ul în browser sau dacă există un nume DNS sau dacă declanșează o aplicație etc. Dacă are o aplicație, atunci poate că putem afișa cumva IP-ul în aplicația.. dacă este un nume DNS, atunci acesta ar trebui să fie rezolvabil etc.. în caz contrar, vedeți răspunsul meu despre cum să difuzați cu `netcat`
Puncte:1
drapel pl

După cum am postat, problema pare prea largă. După cum am înțeles, aveți două probleme diferite:

  1. Generați o metodă pentru a evita problema în cazuri viitoare.
  2. Acces la serverele care în prezent au problema, pentru a implementa soluția 1.

Pentru problema #1, în loc să obțineți o modalitate de a cunoaște noul IP, ați putea cere serverelor să recupereze vechiul IP la o valoare fixă. Ai putea seta o sarcină crontab care verifică IP-ul curent și, ori de câte ori se abate de la o valoare setată, schimbă IP-ul înapoi la țintă. Desigur, veți avea ferestre de timp de „network-blindness”, în funcție de frecvența setată în crontab.

Alternativ, o sarcină crontab ar putea difuza/trimite e-mail/etc. noul IP. Mecanismele potrivite depind foarte mult de ceea ce sunteți dispus să operați, cum accesați serverele.

Toate acestea par o soluție. Dacă sunt configurate corect, acestea nu ar trebui să „uite adresa IP a computerului”. Acesta este punctul de rezolvat, cred. Dacă ați putea oferi mai multe informații despre configurația actuală, aceasta va restrânge problema.

Pentru problema #2, dacă aceasta este ținta dvs., menționați-o. Am o problema "asemanatoare". Un server pe care îl accesez de la distanță își schimbă IP-ul din când în când, deoarece este atribuit de DHCP. Ori de câte ori am probleme sshla server, execut un mic script care, printr-o combinație de ping și ssh (într-o buclă de IP-uri) și verificarea răspunsului, poate obține IP-ul curent. În funcție de multe aspecte ale configurației rețelei, acest lucru poate funcționa pentru dvs. sau nu.

Puncte:1
drapel cn

Bănuiesc că fermierii îl reconfigurează deoarece adresa rețelei locale se schimbă. În acest caz, de ce nu permiteți serverului să obțină adresa prin DHCP, puteți nota adresa Mac (care nu se va schimba) și apoi căutați în tabelele serverelor DHCP sau chiar încercați o căutare pe serverul DNS pentru a găsi pc-ul. Deconectarea cablului de la capătul comutatorului și reconectarea acestuia ar trebui să inițieze o sesiune de configurare DHCP. Majoritatea serverelor DHCP vă permit să atribuiți o adresă pe baza unei adrese Mac, astfel încât să aveți un anumit control asupra acesteia la capătul serverului dhcp.

drapel ng
nu au niciun server DHCP, au doar acest PC cu atatia senzori ca (gaz, temperatura si....)
SEWTGIYWTKHNTDS avatar
drapel cn
În acest caz, faceți serverul dvs. serverul DHCP și distribuiți adrese IP clienților care doresc să se conecteze. Atunci nu există nicio problemă la găsirea adresei IP.
jpbrain avatar
drapel ca
Bună @Parsa, Din cititul, se pare că cea mai ușoară cale este să configurați un server DHCP/mdns pe server. În acest fel, vă conectați la acesta cu DHCP pe client și veți putea să scanați subrețeaua sau doar să vă conectați la ruta implicită.
Puncte:1
drapel pe

Dacă utilizați avahi pe computerul dvs. încorporat nu va trebui să reinventați/reimplementați descoperirea serviciilor

Pe PC încorporat:s:

apt-get install avahi-daemon
systemctl enable avahi-daemon --acum
anulați comentariul #publish-workstation=yes în /etc/avahi/avahi-daemon.conf
systemctl reîncărcare avahi-daemon

Pe mașina folosită pentru a descoperi PC-urile încorporate:s

apt-get install avahi-utils
avahi-browse -atr # va scoate numele și ip:-urile dispozitivelor din rețea către terminal
Puncte:1
drapel us

Cu netcat ai putea face ceva de genul unui cronjob pe „serverele montate pe stâlpi” care face așa ceva la fiecare X minute:

#!/bin/bash

# înlocuiți eth0 cu numele interfeței dvs. sau obțineți IP-ul prin alte mijloace

ip="$(ifconfig | grep -A 1 'eth0' | coada -1 | cut -d ' ' -f 10)"
dat=$(data)
echo „Acesta este IP-ul meu: „$ip | netcat -q 2 -b -u 255.255.255.255 12001

Utilizatorul/Fermierul nu trebuie decât să asculte astfel:

ecou | nc -ulp 12001

Și după X minute ar trebui să obțină ceva de genul acesta:

Acesta este IP-ul meu: 192.168.1.121

Totuși, acest lucru funcționează numai dacă „PC-ul fermierilor” și „serverele montate pe stâlpi” sunt în aceeași subrețea.


Explicaţie:

Scriptul va trimite o transmisie UDP pe portul 12001 și va ieși nc, după sarcina utilă (nostru ecou comanda) + 2 secunde. IP-ul nu trebuie să fie obținut prin intermediul ifconfig evident, dar este destul de ușor de analizat...

Trimiterea acestuia la 255.255.255.255 înseamnă difuzare către întreaga subrețea, indiferent de dimensiune.

Deci nu trebuie să știm în ce rețea ne aflăm.

Pe partea clientului, ascultăm cu nc până când obținem o sarcină utilă. am găsit nc se termină curat în combinație cu o întrerupere de linie (prin intermediul ecou).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.