Mercurial (Wikipedie), software pro SCM (Source Code Management), byl vydán ve verzi 6.4. Přehled novinek v poznámkách k vydání. Ve dnech 5. až 7. dubna proběhne konference Mercurial Paris.
Byly rozdány Ceny Velkého bratra (Big Brother Awards) za rok 2022 pro největší slídily pořádané nevládní organizací Iuridicum Remedium. Dlouhodobý slídil: Microsoft. Firemní slídil: Seznam. Úřední slídil: Nejvyšší správní soud. Výrok Velkého bratra: Marian Jurečka. Pozitivní cena: NoLog.
Byla představena online vzdělávací platforma Ada Computer Science pro učitele, studenty a kohokoli, kdo se zajímá o informatiku. Stojí za ní Raspberry Pi Foundation a Univerzita v Cambridgi.
GitHub má nový RSA SSH klíč. Předchozí soukromý klíč byl krátce vystaven na GitHubu.
Společnost Framework Computer představila (YouTube) nové modulární notebooky: Laptop 13 s Intel Core nebo AMD Ryzen a Laptop 16 (YouTube).
Bylo vydáno Ubuntu 20.04.6 LTS, tj. šesté opravné vydání Ubuntu 20.04 LTS s kódovým názvem Focal Fossa. Přehled novinek v poznámkách k vydání a v přehledu změn.
Připojit neznámý USB flash disk do počítače může být nebezpečné. Dokonce může jít i o život. Někdo rozeslal ekvádorským novinářům USB flash disky, které po připojení do počítače explodují [BBC, Twitter].
Byla vydána nová verze 7.4 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu.
Byla vydána verze 11.0 s kódovým jménem Aramo linuxové distribuce Trisquel GNU/Linux. Založena je na Ubuntu 22.04 LTS a podporována bude do roku 2027. Trisquel patří mezi svobodné distribuce doporučované Nadací pro svobodný software (FSF).
Mozilla založila startup Mozilla.ai a vložila do něj 30 milionů dolarů. Cílem je vývoj důvěryhodné, nezávislé a open source AI.
Dobry den, hledal jsem na netu zpusob jak zjistit IP adresu pocitace, nasel jsem dva zpusoby, akorat ze pro Ubuntu to funguje, ale pro debian ne, nevim jestli mam spatne nainstalovany debian, nebo se musi kod nejak upravit.
script:
#!/usr/bin/env python
import socket
hostname = socket.gethostname()
ip = socket.gethostbyname( socket.gethostname() )
print 'Hostname:', hostname
print 'IP adresa:', ip
Ubuntu:
Hostname: Ubuntu8
IP Adresa: 127.0.1.1
Debian:
Traceback (most recent call last):
File "./h", line 5, in <module>
ip = socket.gethostbyname( socket.gethostname() )
socket.gaierror: (-5, 'No address associated with hostname')
jiny zpusob
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <netdb.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void)
{
struct hostent *he;
char buf[80];
if(gethostname(buf,sizeof(buf))==-1) {
perror("gethostname");
exit(1);
}
printf("Host Name: %s\n", buf);
if((he=gethostbyname(buf))==0) {
herror("gethostbyname");
exit(1);
}
printf("Your Host Name: %s\n", he->h_name);
rintf("Your IP Address: %s\n", inet_ntoa(*((struct in_addr *)he->h_addr_list)));
return 0;
}
Ubuntu:
Host name: Ubuntu8
Your Host Name: Ubuntu8
Your IP Address: 127.0.1.1
Debian:
Host Name: debian
gethostbyname: Unknown host
Neco jsem snad prehlednul? jinak oba systemy bezi pres vmware, ale to by snad nemelo delat problem. Diky za pomoc
ip
nebo ifconfig
by nestacil? /etc/hosts
? Čo majú v /etc/nsswitch.conf
? Čo majú v /etc/resolv.conf
?
Tiež si uvedom, že jeden systém má viacero sieťových interface-ov (prinajmenošom loopback a sieťová karta) a každý z nich môže (a nemusí) mať jednu, alebo viac IP adries. A tie sa vôbec nemusia zhodovať s tým čo je v /etc/hosts, alebo tým čo hovorí DNS server.
P.S. zváž použitie getaddrinfo()
v /etc/hosts
127.0.0.1 localhost
127.0.1.1 debian.localdomain debian
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
/etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat
group: compat
shadow: compat
hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
/etc/resolv.conf
nameserver 212.158.128.2
nameserver 212.158.128.3
socket.gethostname()
na Debianu?
tak problem byl v tom ze v /etc/hostname byl nazev debian a v /etc/hosts byl zase nazev debian2, dal jsem stejny nazev a funguje to
priste radsi nebudu menit nastaveni site :), diky za pomoc vsem
to byl vypis z /etc/hosts ale jineho debiana,
127.0.1.1 debian.localdomain debian
ten co delal problem mel
127.0.1.1 debian.localdomain debian2
a v tom byl ten problem, kdyz jsem kdysi menil nazev pocitace, tak v /etc/host name zustal v obou verzich puvodni nazev debian
gethostname()
. Ak čírou náhodou vráti "localhost", tak sa to nájde v /etc/hosts a malo by to vrátiť 127.0.0.1. Ak to vráti debian alebo debian.localdomain, tak by to malo vrátiť 127.0.1.1. Ak to vráti niečo iné tak, sa pôjde na DNS server na 212.158.128.2. Keďže v resolv.conf nemáš search
, a gethostname() ti nedá doménu, tak sa na tom DNS serveri najskôr nič nenájde a skončí to s chybou.
Takže záleží na tom čo vráti gethostname().
moc jsem tomu nerozumnel, ale ted je mi to trosku jasnejsi, diky za vysvetleni :)
da se nejak jeste zjistit IP adresa pocitace v siti?
ip a ipconfig prikazy bych to mohl ulozit do souboru a pak nacist, ale neni i nejaky jiny zpusob jak s tim rovnou pracovat v programu?
Řešení jsi uvedl sám např. v Pythonu:
ip = socket.gethostbyname("www.google.com")
nebo Bashi:
$ host www.google.com
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 72.14.221.99
www.l.google.com has address 72.14.221.103
www.l.google.com has address 72.14.221.104
A pokud to potřebuješ do proměné v Bashi:
$ IP=$(host www.google.com |tac |head -n1)
$ IP=${IP##* }
$ echo $IP
74.125.39.103
diky, ale chtel jsem IP adresu pocitace v lokalni siti, a jinak to pisu v C
takze chtel jsem v ubuntu(debianu) napsat aplikaci, ktera bude posilat soubor pres sockety po siti, takze budu potrebovat IP adresy klienta a serveru, a nechci je tam zadavat rucne tim ze bude nekde hledat v nastaveni a pak to tam psat, chtel sem si udelat funkci, ktera mi tu adresu zjisti automaticky
chtel jsem to mit tak ze spustim program na serveru, zjisti mi to jeho ip adresu v siti a tu pak napisu do klienta, nic sloziteho
Aha, takže Ti jde asi o to, že server dostane od dhcp pokaždé přidělenou jinou IP, v tom případě Ti řešení i s ukázkou napsal R níže. Dynamické je jenom IP, takže jen zavoláš:
ioctl(fd, SIOCGIFADDR, &ifr);
na zařízení ethX
v lokální sítí a přečteš si jeho IP ze struktury:
inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr)
Tohle jsi chtěl?
sin_addr.s_addr
použij INADDR_ANY
a fcí setsockopt()
nastav level na SOL_SOCKET
, optname na SO_BROADCAST
a optval na 1
.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h> /* for strncpy */
#include <sys/ioctl.h>
#include <net/if.h>
#include <arpa/inet.h>
int main()
{
int fd;
struct ifreq ifr;
fd = socket(AF_INET, SOCK_DGRAM, 0);
strncpy(ifr.ifr_name, "eth1", IFNAMSIZ-1);
ioctl(fd, SIOCGIFADDR, &ifr);
close(fd);
printf("%s\n", inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
return 0;
}
tak uz to funguje :)
lze nejak osetrit vyber sitovky? jestli to je eth0 nebo eth1? pokazde to vraci nejakou ip adresu, ale jen jedna sitovka je pripojena k lokalni siti
route
a hned uvidíš které zařízení patří do lokální sítě. Jak se to dělá v C uvidíš přímo ve zdrojáku tohoto příkazu, stačí si stáhnout zdrojáky balíčku net-tools
. Případně si můžeš zavolat příkaz route
přímo z C a pouze proparsovat jeho výstup.
mohl bys napsat nejaky priklad? moc by mi to pomohlo, nevim jak deklarovat ifr
promin nevsiml jsem si te ukazky, kde najdu presne zarizeni eth0 abych ho mohl vlozit do fd?
/etc/hosts
přidej k 127.0.0.1
jméno z /etc/hostname
. IP k danému hostname se hledá mimo DNS také v tomto souboru.
ip -o -4 a s dev eth0 | sed 's/.*inet\ \([0-9.]*\)\/.*/\1/'
diky, ale neznas jeste nejaky zpusob jak to dostat do programu a poracovat s tim jako se stringem?
Tiskni
Sdílej: