Javaprogram som besöker sida, loggar in, ändrar en...
Javaprogram som besöker sida, loggar in, ändrar en...
Hejsan.
Har ett webhotell+domän hos <a class="postlink" href="http://www.web10.se">http://www.web10.se</a>, och jag kan enbart uppdatera subdomänerna via deras hemsida.
Nu tänkte jag skriva ett litet javaprogram som loggar in på sidan( http://www.web10.se/mw_webhotel.php ), sen går till "dns"-sidan, på dns-sidan ska programmet leta upp rätt formulärruta och ändra IP adressen, sedan ska den skicka formuläret.
Inte allt för avancerat program, men jag har inte programmerat så mycket java (har läst 4p på högskola nu i höst), men har programmerat rätt mycket php, lite c++, och lite annat:)
Men tänkte höra med er som kan det här, vad finns det för färdiga bibliotek jag kan använda mig av?
Alla tips är välkomna.
Tack på förhand
*edit*
Hur får man in java & javac på ubuntu-server 6.10?
*edit2*
För er som är intresserade hur det går.
Klart:
Kolla upp egen extern IP.
Kolla upp IP för subdomänen. (ex: brange.gulleplutt.se är kopplad till xxx.yyy.zzz.aaa).
Kvar:
Leka med sockets eller URL, och försöka kunna logga in på sidan för att sedan uppdatera formuläret:)
Har ett webhotell+domän hos <a class="postlink" href="http://www.web10.se">http://www.web10.se</a>, och jag kan enbart uppdatera subdomänerna via deras hemsida.
Nu tänkte jag skriva ett litet javaprogram som loggar in på sidan( http://www.web10.se/mw_webhotel.php ), sen går till "dns"-sidan, på dns-sidan ska programmet leta upp rätt formulärruta och ändra IP adressen, sedan ska den skicka formuläret.
Inte allt för avancerat program, men jag har inte programmerat så mycket java (har läst 4p på högskola nu i höst), men har programmerat rätt mycket php, lite c++, och lite annat:)
Men tänkte höra med er som kan det här, vad finns det för färdiga bibliotek jag kan använda mig av?
Alla tips är välkomna.
Tack på förhand
*edit*
Hur får man in java & javac på ubuntu-server 6.10?
*edit2*
För er som är intresserade hur det går.
Klart:
Kolla upp egen extern IP.
Kolla upp IP för subdomänen. (ex: brange.gulleplutt.se är kopplad till xxx.yyy.zzz.aaa).
Kvar:
Leka med sockets eller URL, och försöka kunna logga in på sidan för att sedan uppdatera formuläret:)
Javaprogram som besöker sida, loggar in, ändrar en...
Jag skulle tro att allt du behöver för att göra det där finns i javas standard API.
http://java.sun.com/j2se/1.5.0/docs/api/index.html
Hur hade du tänkt att gå tillväga med det hela?
Öppna en socket och skicka iväg egen gjorda html paket?
För isåfall behöver du nog bara logga in och sedan skicka ett paket med den nya subdomänen, och sedan eventuellt logga ut.
Ett utmärkt program för kolla på hur HMTL paketen som du skickar innehåller heter wireshark, detta paket finnns att ladda hem med Synaptic. (Wireshark hette förut Ethereal)
Jag tror att automatix2 har ett smidigt sätt att installera java/Javac 5.0
Vore skoj att se hur det går för dig
så posta upplösningen här ^_^
http://java.sun.com/j2se/1.5.0/docs/api/index.html
Hur hade du tänkt att gå tillväga med det hela?
Öppna en socket och skicka iväg egen gjorda html paket?
För isåfall behöver du nog bara logga in och sedan skicka ett paket med den nya subdomänen, och sedan eventuellt logga ut.
Ett utmärkt program för kolla på hur HMTL paketen som du skickar innehåller heter wireshark, detta paket finnns att ladda hem med Synaptic. (Wireshark hette förut Ethereal)
Jag tror att automatix2 har ett smidigt sätt att installera java/Javac 5.0
Vore skoj att se hur det går för dig

Javaprogram som besöker sida, loggar in, ändrar en...
Inte helt säker på hur jag ska gå till väga.
Har börjat lite nu, börjat skriva ett litet program som kollar upp min externa IP genom att ta hem en sida <a class="postlink" href="http://www.gulleplutt.se/ip.php">http:/ ... /ip.php</a> och läsa första raden från den.
Men det borde gå att göra det på ett smidigare sätt än det jag använder (hämtar med wget, sen öppnar och läser..)
Ska läsa lite om sockets och så:)
Om någon har lite exempelkod eller dyligt är det välkommet:D
*edit*
Började om, hämtar nu IP med hjälp av URL och BufferedReader.
Nu börjar det svåra:)
Har börjat lite nu, börjat skriva ett litet program som kollar upp min externa IP genom att ta hem en sida <a class="postlink" href="http://www.gulleplutt.se/ip.php">http:/ ... /ip.php</a> och läsa första raden från den.
Men det borde gå att göra det på ett smidigare sätt än det jag använder (hämtar med wget, sen öppnar och läser..)
Ska läsa lite om sockets och så:)
Om någon har lite exempelkod eller dyligt är det välkommet:D
*edit*
Började om, hämtar nu IP med hjälp av URL och BufferedReader.
Kod: Markera allt
class auto
{
public static void main(String[] args)
{
//some vars.
String myIP;
try //try to get my IP.
{
//Get my external IP addr.
URL ip = new URL("http://www.gulleplutt.se/ip.php");
BufferedReader in = new BufferedReader(new InputStreamReader(ip.openStream()));
myIP = in.readLine();
System.out.println("IP Address: "+myIP); //just print out my IP
in.close();
}
catch (IOException e) { System.out.println("error"); }
}
}
Javaprogram som besöker sida, loggar in, ändrar en...
Det här borde funka för att hämta ut din IP genom den där sidan.
ingen garanti för att det här rätt, har inte kompilerat och testat den här koden.
Litet kod exempel för en socket
Sedan är det bara att hämta ut input och output strömmarna och läsa / skriva till dom ^_^
dock när du kopplar upp dig på port 80 så kopplar du upp dig mot den hostens webserver och måste följa http protkollet.
ingen garanti för att det här rätt, har inte kompilerat och testat den här koden.
Kod: Markera allt
try {
URL url;
InputStream inp;
String ip;
byte b[];
url = new URL("http://www.gulleplutt.se/ip.php");
inp = url.openStream();
inp.read(b); //OBS! ingen garanti för att hela IP adressen har lästs in här, men den borde har gjort det...
inp.close();
ip = new String(b);
System.out.println("Ip är " + ip);
} catch(Exception e) {
System.err.println("fel:" + e.getMessage());
// do stuff...
}
Kod: Markera allt
Socket s;
s = new socket("http://cepe.com",80);
dock när du kopplar upp dig på port 80 så kopplar du upp dig mot den hostens webserver och måste följa http protkollet.
Javaprogram som besöker sida, loggar in, ändrar en...
[quote="gasol"]Litet kod exempel för en socket
Sedan är det bara att hämta ut input och output strömmarna och läsa / skriva till dom ^_^
dock när du kopplar upp dig på port 80 så kopplar du upp dig mot den hostens webserver och måste följa http protkollet.[/quote]
Inte så bara:)
Har googlat lite och så, men inte funnit några bra exempel eller tutorials. Någon som har något liggandes?:)
Kod: Markera allt
Socket s;
s = new socket("http://cepe.com",80);
dock när du kopplar upp dig på port 80 så kopplar du upp dig mot den hostens webserver och måste följa http protkollet.[/quote]
Inte så bara:)
Har googlat lite och så, men inte funnit några bra exempel eller tutorials. Någon som har något liggandes?:)
Javaprogram som besöker sida, loggar in, ändrar en...
Ledsen om jag inte förklarar så bra
Jag tycker själv att den här verkar vara bra. ^_^ (Suns egen guide på java sockets)
http://java.sun.com/docs/books/tutorial ... index.html
Om du vill hålla det enkelt så skippa allt som heter Datagram och UDP.

Jag tycker själv att den här verkar vara bra. ^_^ (Suns egen guide på java sockets)
http://java.sun.com/docs/books/tutorial ... index.html
Om du vill hålla det enkelt så skippa allt som heter Datagram och UDP.
Javaprogram som besöker sida, loggar in, ändrar en...
Ett annat tips är att göra det med hjälp av PHP och cURL, med tanke på att du programmerat PHP tidigare. cURL är ett ypperligt verktyg för det du skall göra.
Javaprogram som besöker sida, loggar in, ändrar en...
fors: funderade på det innan med, men då måste man ha php installerat för att kunna köra programmet, slipper man med java.
Men kanske kan göra någon blandning.
Göra så java programmet skickar data till en php-sida, som i sin tur tar hand om inloggningen och uppdateringen.
Ska kolla lite på cURL.
Men kanske kan göra någon blandning.
Göra så java programmet skickar data till en php-sida, som i sin tur tar hand om inloggningen och uppdateringen.
Ska kolla lite på cURL.
Javaprogram som besöker sida, loggar in, ändrar en...
[quote="brange"]fors: funderade på det innan med, men då måste man ha php installerat för att kunna köra programmet, slipper man med java.
Men kanske kan göra någon blandning.
Göra så java programmet skickar data till en php-sida, som i sin tur tar hand om inloggningen och uppdateringen.
Ska kolla lite på cURL.[/quote]
Givetvis måste du ha PHP installerat på datorn. Dock kräver det att du har Java installerat också, om du skall använda det.
I vilket fall som helst så menar jag ett PHP-script som körs via kommandotolken och inte via en webbsida (dvs, paketet php4-cli). I annat fall kan du alltid skriva det i Bash eller i något annat shellscript.
Men kanske kan göra någon blandning.
Göra så java programmet skickar data till en php-sida, som i sin tur tar hand om inloggningen och uppdateringen.
Ska kolla lite på cURL.[/quote]
Givetvis måste du ha PHP installerat på datorn. Dock kräver det att du har Java installerat också, om du skall använda det.

Javaprogram som besöker sida, loggar in, ändrar en...
Mjo, förstod att du menade php-client, har gjort lite småsaker m.h.a. det.
Iof måste man ha java installerat med, fast det är vanligare:)
tänkte att mitt program (om det blir klart) ska gå att köra på andra burkar än dom som kör ubuntu:)
Nu ska jag sätta mig och läsa lite mer om sockets...
Iof måste man ha java installerat med, fast det är vanligare:)
tänkte att mitt program (om det blir klart) ska gå att köra på andra burkar än dom som kör ubuntu:)
Nu ska jag sätta mig och läsa lite mer om sockets...

Javaprogram som besöker sida, loggar in, ändrar en...
jag kan ge dig lite mer tips senare när jag har tid, har skrivit ett liknande program i C, men har 1000 saker att göra ju nust känns det som
Javaprogram som besöker sida, loggar in, ändrar en...
[quote="gasol"]jag kan ge dig lite mer tips senare när jag har tid, har skrivit ett liknande program i C, men har 1000 saker att göra ju nust känns det som[/quote]
Det vore väldigt snällt av dig:)
Känner lite detsamma, borde igentligen inte sitta här med detta, men men:)
Det vore väldigt snällt av dig:)
Känner lite detsamma, borde igentligen inte sitta här med detta, men men:)
SV: Javaprogram som besöker sida, loggar in, ändrar en...
Sådärja:)
Många timmar senare;)
Har nu skrivit en class som fixar de uppgifterna jag behöver.
Sen två huvudprogram, ett "commandline"-baserat och ett grafiskt.
Projektet är dock EJ helt klart, lite saker kvar att göra och ändra lite saker och så.
Men det funkar nu iallafall, och nu ska jag på semester., ska åka upp till åre och mitt tåg går om 3timmar så ska packa klart allt nu
Kommentera gärna koden=)
Koder:
klassen: web10.java
commandline: auto.java
grafiska: autogui.java
Många timmar senare;)
Har nu skrivit en class som fixar de uppgifterna jag behöver.
Sen två huvudprogram, ett "commandline"-baserat och ett grafiskt.
Projektet är dock EJ helt klart, lite saker kvar att göra och ändra lite saker och så.
Men det funkar nu iallafall, och nu ska jag på semester., ska åka upp till åre och mitt tåg går om 3timmar så ska packa klart allt nu

Kommentera gärna koden=)
Koder:
klassen: web10.java
Kod: Markera allt
import java.net.*;
import java.io.*;
import java.util.regex.*;
class web10
{
private String user;
private String passwd;
private String domain;
private String dnsname;
public web10(String user, String passwd, String domain, String dnsname)
{
this.user = user;
this.passwd = passwd;
this.domain = domain;
this.dnsname = dnsname;
}
public String getMyIP()
{
String myIP = "";
try
{
//Get my external IP addr.
URL ip = new URL("http://www.gulleplutt.se/ip.php");
BufferedReader in = new BufferedReader(new InputStreamReader(ip.openStream()));
myIP = in.readLine();
in.close();
}
catch (IOException e)
{
System.err.println("error:" + e.getMessage());
System.exit(0);
}
return myIP;
}
public String getDnsIP()
{
String dnsIP = "";
try
{
InetAddress addr = InetAddress.getByName ( dnsname+"."+domain );
dnsIP = addr.getHostAddress();
}
catch ( UnknownHostException e )
{
System.err.println( "Can't detect domain: " + e );
System.exit(0);
}
return dnsIP;
}
public String getRemID()
{
String remID = "";
String input = "";
try
{
String login = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(user, "UTF-8");
login += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(passwd, "UTF-8");
// Send data (login)
URL url = new URL("http://www.web10.se/mw_webhotel.php?area=dns");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(login);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String pattern = ".*<input type=hidden name='id(.*)' value='(.*)'><input type='text' name='localname(.*)' style='width:40px;' value='"+dnsname+"' MAXLENGTH=50></td><td>.*";
Pattern p = Pattern.compile(pattern);
Matcher m;
String line;
boolean search = true;
while ((line = rd.readLine()) != null && search) {
input += line;
m = p.matcher(line);
if (m.matches())
remID = m.group(2);
}
wr.close();
rd.close();
}
catch (Exception e)
{
System.err.println("error: " + e.getMessage());
System.exit(0);
}
return remID;
}
public void remove(String remID)
{
try
{
String login = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(user, "UTF-8");
login += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(passwd, "UTF-8");
String rem = URLEncoder.encode("area", "UTF-8") + "=" + URLEncoder.encode("dns", "UTF-8");
rem += "&" + URLEncoder.encode("dnsdomain", "UTF-8") + "=" + URLEncoder.encode(domain, "UTF-8");
rem += "&" + URLEncoder.encode("isaction", "UTF-8") + "=" + URLEncoder.encode("deldns", "UTF-8");
rem += "&" + URLEncoder.encode("delid", "UTF-8") + "=" + URLEncoder.encode(remID, "UTF-8");
URL url = new URL("http://www.web10.se/mw_webhotel.php?area=dns");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(rem+"&"+login);
wr.flush();
wr.close();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String input="";
String line;
while ((line = rd.readLine()) != null) {
input += line;
}
//System.out.println("Removing: "+remID);
}
catch (Exception e)
{
System.err.println("error: " + e.getMessage());
System.exit(0);
}
}
public void add(String ipaddr)
{
try
{
//login string
String login = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(user, "UTF-8");
login += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(passwd, "UTF-8");
//add String
String add = URLEncoder.encode("localname", "UTF-8") + "=" + URLEncoder.encode(dnsname, "UTF-8");
add += "&" + URLEncoder.encode("type", "UTF-8") + "=" + URLEncoder.encode("A", "UTF-8");
add += "&" + URLEncoder.encode("mxpri", "UTF-8") + "=" + URLEncoder.encode("0", "UTF-8");
add += "&" + URLEncoder.encode("targethost", "UTF-8") + "=" + URLEncoder.encode(ipaddr, "UTF-8");
add += "&" + URLEncoder.encode("area", "UTF-8") + "=" + URLEncoder.encode("dns", "UTF-8");
add += "&" + URLEncoder.encode("dnsdomain", "UTF-8") + "=" + URLEncoder.encode(domain, "UTF-8");
add += "&" + URLEncoder.encode("isaction", "UTF-8") + "=" + URLEncoder.encode("insertdns", "UTF-8");
URL url = new URL("http://www.web10.se/mw_webhotel.php?area=dns");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(login+"&"+add);
wr.flush();
wr.close();
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String input="";
String line;
while ((line = rd.readLine()) != null) {
input += line;
}
//System.out.println("dnsname: "+dnsname+" updated to IP: "+ipaddr);
}
catch (Exception e)
{
System.err.println("error: " + e.getMessage());
System.exit(0);
}
}
}
Kod: Markera allt
class auto
{
public static void main(String[] args)
{
if (args.length != 4)
{
System.out.println("Usage: auto dnsname domain user passwd");
System.exit(0);
}
//some vars.
String myIP=null,dnsIP=null;
String dnsName = args[0];
String domain = args[1];
String user = args[2];
String passwd = args[3];
web10 w10 = new web10(user,passwd,domain,dnsName);
myIP = w10.getMyIP();
if (myIP.equals(""))
{
System.out.println("Can't detect your IP");
System.exit(0);
}
dnsIP = w10.getDnsIP();
//check if dnsIP equals myIP.
if (myIP.equals(dnsIP))
{
//no need to update.
System.out.println("No update necessary");
System.exit(0);
}
else
{
System.out.println("Updating dns to IP "+myIP);
//uppdating:D
w10.remove(w10.getRemID());
w10.add(myIP);
}
}
}
Kod: Markera allt
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class autogui implements ActionListener {
JFrame autoguiFrame;
JPanel autoguiPanel;
JTextField user,passwd,dns,domain;
JLabel userLabel,passwdLabel,dnsLabel,domainLabel,compleLabel;
JButton update;
public autogui() {
//Create and set up the window.
autoguiFrame = new JFrame("autodns GUI");
autoguiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
autoguiFrame.setSize(new Dimension(500, 500));
//Create and set up the panel.
autoguiPanel = new JPanel(new GridLayout(0, 2));
//Add the widgets.
addWidgets();
//Set the default button.
autoguiFrame.getRootPane().setDefaultButton(update);
//Add the panel to the window.
autoguiFrame.getContentPane().add(autoguiPanel, BorderLayout.CENTER);
//Display the window.
autoguiFrame.pack();
autoguiFrame.setVisible(true);
}
/**
* Create and add the widgets.
*/
private void addWidgets() {
//Create widgets.
user = new JTextField(2);
passwd = new JTextField(2);
dns = new JTextField(2);
domain = new JTextField(2);
userLabel = new JLabel("username: ", SwingConstants.LEFT);
passwdLabel = new JLabel("password: ", SwingConstants.LEFT);
dnsLabel = new JLabel("dnsname: ", SwingConstants.LEFT);
domainLabel = new JLabel("domain: ", SwingConstants.LEFT);
compleLabel = new JLabel("", SwingConstants.LEFT);
update = new JButton("update:)");
//fahrenheitLabel = new JLabel("Fahrenheit", SwingConstants.LEFT);
//Listen to events from the Convert button.
update.addActionListener(this);
//Add the widgets to the container.
autoguiPanel.add(userLabel);
autoguiPanel.add(user);
autoguiPanel.add(passwdLabel);
autoguiPanel.add(passwd);
autoguiPanel.add(dnsLabel);
autoguiPanel.add(dns);
autoguiPanel.add(domainLabel);
autoguiPanel.add(domain);
autoguiPanel.add(update);
autoguiPanel.add(compleLabel);
//currentIPlabel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
}
public void actionPerformed(ActionEvent event) {
//Parse degrees Celsius as a double and convert to Fahrenheit.
web10 w10 = new web10(user.getText(),passwd.getText(),domain.getText(),dns.getText());
String myIP=null,dnsIP=null;
myIP = w10.getMyIP();
dnsIP = w10.getDnsIP();
w10.remove(w10.getRemID());
w10.add(myIP);
compleLabel.setText("DNS: "+dns.getText()+" updated to IP: "+myIP);
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Make sure we have nice window decorations.
JFrame.setDefaultLookAndFeelDecorated(true);
autogui agui = new autogui();
}
public static void main(String[] args) {
//Schedule a job for the event-dispatching thread:
//creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
SV: Javaprogram som besöker sida, loggar in, ändrar en...
Tjena, sorry för att jag inte hann skriva några tips, men har haft fullt upp med plugget.
Ett tips om du vill att lösenordet ska visas som **** tecken är att använda ett JPasswordField istället för ett JTextField.
Det är bara att byta ut typen på passwd från JTextField till JPasswordField
och köra passwd = new JPasswordField(); för att skapa ett nytt fält.
Ett tips om du vill att lösenordet ska visas som **** tecken är att använda ett JPasswordField istället för ett JTextField.
Det är bara att byta ut typen på passwd från JTextField till JPasswordField
och köra passwd = new JPasswordField(); för att skapa ett nytt fält.