Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Mam taki problem, chce wyciągnąć kilka informacji z 2 osobnych plików, z tym że w pierwszym pliku informacje się powtarzają a chce wyciągnąć je tylko raz bez dublowania.
Informacje które chcę wyciągnąć to
Data
Packet-Type = Access-Accept (nie musi być tego pola ale musze wiedzieć czy użytkownik dostał akceptację)
User-Name
NAS-IP-Address
Called-Station-Id
Calling-Station-Id
Plik 1:
Mon Oct 17 17:13:31 2011 Packet-Type = Access-Request User-Name = "user" NAS-IP-Address = 192.168.0.50 NAS-Port = 0 Called-Station-Id = "00195b54c564" Calling-Station-Id = "001f5bb7c6a0" NAS-Identifier = "Realtek Access Point. 8181" NAS-Port-Type = Wireless-802.11 Service-Type = Framed-User Connect-Info = "CONNECT 11Mbps 802.11b" EAP-Message = 0x020200061900 State = 0x26bdee6e27bff763f0a3e9a1e78a85de Message-Authenticator = 0xb6e0fa3a84387975dd623c6b2ef71165 Mon Oct 17 17:13:31 2011 Packet-Type = Access-Request User-Name = "user" NAS-IP-Address = 192.168.0.50 NAS-Port = 0 Called-Station-Id = "00195b54c564" Calling-Station-Id = "001f5bb7c6a0" NAS-Identifier = "Realtek Access Point. 8181" NAS-Port-Type = Wireless-802.11 Service-Type = Framed-User Connect-Info = "CONNECT 11Mbps 802.11b" EAP-Message = 0x020300061900 State = 0x26bdee6e24bef763f0a3e9a1e78a85de Message-Authenticator = 0x556c829f8c3ff3c31913380f9c445c51 Mon Oct 17 17:13:31 2011 Packet-Type = Access-Request User-Name = "user" NAS-IP-Address = 192.168.0.50 NAS-Port = 0 Called-Station-Id = "00195b54c564" Calling-Station-Id = "001f5bb7c6a0" NAS-Identifier = "Realtek Access Point. 8181" NAS-Port-Type = Wireless-802.11 Service-Type = Framed-User Connect-Info = "CONNECT 11Mbps 802.11b"
Plik 2:
Mon Oct 17 17:13:31 2011 Packet-Type = Access-Accept MS-MPPE-Recv-Key = 0x0790f92012023074ac3d4bb98da2287b20e1d7ecf0391f9b17d11197dbb402ca MS-MPPE-Send-Key = 0xadec40c8be2eb3fa9dc9ff298ef60021072d755b48b3218c522047e172af04ef EAP-MSK = 0x0790f92012023074ac3d4bb98da2287b20e1d7ecf0391f9b17d11197dbb402caadec40c8be2eb3fa9dc9ff298ef60021072d755b48b3218c522047e172af04ef EAP-EMSK = 0xcf5d870377d72089fbda59323b1323bfc918719469b8edcc2da53035d011e96346378efae6f53a8844448f523c68a9130f8533a5ff74bacae6e214f988b41378 EAP-Message = 0x03090004 Message-Authenticator = 0x00000000000000000000000000000000 User-Name = "user"
Po modyfikacji powinno to wyglądac mniej więcej tak:
Mon Oct 17 17:13:31 2011
User-Name = "user"
NAS-IP-Address = 192.168.0.50
Called-Station-Id = "00195b54c564"
Calling-Station-Id = "001f5bb7c6a0"
Ostatnio edytowany przez czeri (2011-10-25 20:17:33)
Offline
No dobrze, i w czym konkretnie masz problem?
(Odpowiadając na pytanie z tematu: tak, to da się zrobić.)
Offline
Przepraszam, może źle sprecyzowałem pytanie, niebardzo wiem jak to zrobić, wiem jak wyciągnąć dane z 2 pliku, ale z pierwszego gdzie dane są zdublowane wogóle niewiem jak sie za to zabrać. I czy mógłbym ktoś mi pomóc stworzyć takie zapytanie aby dało mi taki rezultat jaki napisałem ?
Offline
Możesz skorzystać z polecenia sort (z flagą -u, aby uniknąć wykorzystywania polecenia uniq). Możesz również wykorzystać flagę -m polecenia grep.
Jeżeli chcesz pracować na obu plikach jednocześnie (na podstawie Twojego drugiego postu nie jestem już tego pewien; w plikach powtarza się m.in. data i pole User-Name), to musisz najpierw wykorzystać polecenie cat zgodnie z jego pierwotnym przeznaczeniem (nazwa wywodzi się od [i]conCATenate[/i]), czyli połączyć oba pliki w jeden i dopiero przekazać do grepa czy czegokolwiek innego. Byłaby to chyba pierwsza sytuacja, w której zapis [tt]cat |grep[/tt] ma sens, z jaką się spotykam w życiu.
Offline
jeśli użyje sort to nie uzyskam takiej kolejności jaką bym chciał, myślałem żeby przekopiować oba pliki do jednego i tam zrobić tak by usunąć rzeczy które się powtarzają, ale nie umiem znaleźć polecenia na usuwanie danych z pliku (niewiem czy takie polecenie istnieje). Jest ktoś w stanie mi pomóc.
Powiem dlaczego chce takie coś osiągnąć. Mam logi radiusa które są przechowywane w swoich plikach w jednym są zapytania w drugim akceptacje. Niestety w pliku z akceptacją niema danych które są mi potrzebne do pełnego zlokalizowania użytkownika. (mac adres użytkownika, mac adres punktu dostępowego)
Dane tak uzyskane chcę w przystępny sposób za pomocą php-a wyświetlić na stronie (ale żeby je wyświetlic na stronie musze mieć je jakoś uporządkowane i do tego sprowadza się cały problem..
Ostatnio edytowany przez czeri (2011-10-26 17:02:44)
Offline
Ale skoro masz to wyświetlać na stronie internetowej, dlaczego od razu nie napisać tego w PHP?
Możesz wczytać oba pliki do jednej tablicy, przy pomocy grepa (funkcja PHP) wyciągać linijki spełniające odpowiednie kryterium i potem przypisywać do zmiennej tylko pierwszy element z tej tablicy tymczasowej. Pewnie i da się to jakoś bardziej elegancko rozwiązać (sądzę że moduł do przetwarzania plików INI może się okazać pomocny), ale to taka propozycja na szybko. Akurat w PHP jestem znacznie mniej biegły niż w shellu.
Ewentualnie jeśli już to musi być w shellu, to mimo to użyj polecenia sort (bo spełnia swoje zadanie) a na poziomie PHP manipuluj kolejnością przedstawienia wyników. Co to za problem?
Od biedy możesz nawet w tym shellu przypisywać poszczególne linie do zmiennych a później w preferowanej kolejności zapisywać je w tymczasowym pliku tekstowym (który potem odczyta PHP).
Offline
mam coś takiego:
{ awk '{ $1=""; print $0; }' freeradius/radius.log; cat /var/log/dhcpd.log ; } | sort -k 1M,2 -k 2n,3 -k 3,4 -k 4r,5
co w rezultacie daje mi takie coś:
Oct 27 17:49:00 debian6 dhcpd: DHCPREQUEST for 192.168.0.5 from 00:0c:29:20:40:ab via eth0 Oct 27 17:49:08 debian6 dhcpd: DHCPREQUEST for 192.168.0.5 from 00:0c:29:20:40:ab via eth0 Oct 27 17:52:07 2011 : Auth: Login OK: [user] (from client localhost port 0) Oct 27 17:52:40 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0) Oct 27 17:52:40 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel)
więc jest już poniekąd to co chciałem osiągnąć chciałem tą samą operację zrobić w php za pomocą funkcji exec, ale nie rusza.
Wiecie jak to zrobić żeby php mi to wyswietlił ?
Offline
Udało mi się stworzyć coś takiego, nie jest to szczyt programistyczny ale działa
$plik = implode(',', file('/var/log/dhcpd.log')); $tablica = explode(",", $plik); $n = count($tablica); $zmienna=1; $wyrazenie = "/DHCPACK/"; for ($i=0;$i<$n; $i++) { $tekst=$tablica[$i]; if (preg_match($wyrazenie, $tekst)) { $tabliczka[$zmienna]=$tablica[$i]; $zmienna+=1; } } $plik = implode(',', file('/var/log/freeradius/radius.log')); $tablica = explode(",", $plik); $n = count($tablica); $wyrazenie = "/TLS/"; for ($i=0;$i<$n; $i++) { $tekst = $tablica[$i]; if (preg_match($wyrazenie, $tekst)) { $tabliczka[$zmienna]=$tablica[$i]; $zmienna+=1; } } for ($i=0;$i<$zmienna; $i++){ echo $tabliczka[$i].'<br />'; }
wynik jest taki:
Oct 26 21:12:49 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 26 21:13:09 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 26 21:13:11 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 26 21:32:22 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 26 21:35:20 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 27 17:20:57 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 27 17:21:12 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 27 17:25:22 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 27 17:25:27 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Oct 27 17:49:00 debian6 dhcpd: DHCPACK on 192.168.0.5 to 00:0c:29:20:40:ab via eth0 Nov 1 09:56:50 debian6 dhcpd: DHCPACK on 192.168.0.5 to 00:0c:29:20:40:ab via eth0 Nov 1 10:07:04 debian6 dhcpd: DHCPACK on 192.168.0.2 to 00:1f:5b:b7:c6:a0 via eth0 Wed Oct 26 21:13:08 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel) Wed Oct 26 21:32:18 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel) Thu Oct 27 17:20:53 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel) Thu Oct 27 17:25:17 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel) Thu Oct 27 17:52:40 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel) Tue Nov 1 10:07:00 2011 : Auth: Login OK: [user] (from client 192.168.0.50/32 port 0 cli 001f5bb7c6a0 via TLS tunnel)
Teraz pytanie jak zrobić żeby z tej tablicy wyciągnąć kilka danych i wsadzić je do tabeli html-owej
tabela miała by strukture:
data - login - adres_ip - mac_adres
Offline
Strony: 1
Time (s) | Query |
---|---|
0.00021 | SET CHARSET latin2 |
0.00006 | SET NAMES latin2 |
0.00102 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.119.167.189' WHERE u.id=1 |
0.00095 | UPDATE punbb_online SET logged=1732454545 WHERE ident='18.119.167.189' |
0.00053 | SELECT * FROM punbb_online WHERE logged<1732454245 |
0.00087 | DELETE FROM punbb_online WHERE ident='3.129.69.134' |
0.00083 | DELETE FROM punbb_online WHERE ident='3.133.140.88' |
0.00084 | DELETE FROM punbb_online WHERE ident='3.145.56.150' |
0.00083 | SELECT topic_id FROM punbb_posts WHERE id=184667 |
0.00148 | SELECT id FROM punbb_posts WHERE topic_id=19944 ORDER BY posted |
0.00081 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=19944 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00088 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=19944 ORDER BY p.id LIMIT 0,25 |
0.00075 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=19944 |
Total query time: 0.01012 s |